Detect and handle overloaded methods.

git-svn-id: svn://10.0.0.236/trunk@16312 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
rth%cygnus.com
1998-12-12 08:21:25 +00:00
parent 3a6c1f822f
commit b6e23e71e1
2 changed files with 54 additions and 10 deletions

View File

@@ -125,11 +125,26 @@ bool NetscapeHeaderGenerator::genHeaderFile(ClassFileSummary &summ,
/* Generate a declaration for the array type corresponding to this class */
PR_fprintf(fp, "ARRAY_OF(Java_%s);\n", mangledClassName);
/* Now go through each native method and generate a declaration for it */
const Method **methods = summ.getMethods();
uint32 methodCount = summ.getMethodCount();
/* Now go through each method and see if it is overloaded. */
TemporaryBuffer overbuf(methodCount*sizeof(bool));
bool *overloadedMethods = (bool *) (char *) overbuf;
for (i = 0; i < methodCount; i++) {
const char *methodName = methods[i]->getName();
overloadedMethods[i] = false;
for (int j = 0; j < methodCount; ++j)
if (i != j && strcmp(methodName, methods[j]->getName()) == 0)
overloadedMethods[i] = true;
}
NetscapeShortMangler mangler;
/* Now go through each native method and generate a declaration for it */
NetscapeShortMangler smangler;
NetscapeLongMangler lmangler;
/* extern "C" the generated method headers */
PR_fprintf(fp, "extern \"C\" {\n");
@@ -153,9 +168,16 @@ bool NetscapeHeaderGenerator::genHeaderFile(ClassFileSummary &summ,
TemporaryBuffer copy(len);
char *mangledMethodName = copy;
if (!mangler.mangle(className, methodName, signature,
mangledMethodName, len))
continue;
if (overloadedMethods[i]) {
if (!lmangler.mangle(className, methodName, signature,
mangledMethodName, len))
continue;
}
else {
if (!smangler.mangle(className, methodName, signature,
mangledMethodName, len))
continue;
}
PR_fprintf(fp, "\n/*\n");
PR_fprintf(fp, " * Class : %s\n", className);