Simpler code in Codegen.visitRegularCall to select which runtime method to call.

This commit is contained in:
igor%mir2.org 2003-05-02 11:34:05 +00:00
Родитель f22082da7c
Коммит 1460a34ed2
1 изменённых файлов: 45 добавлений и 53 удалений

Просмотреть файл

@ -1952,72 +1952,64 @@ public class Codegen extends Interpreter {
} }
String className; String className;
String methodNameNewObj; String methodName;
String methodNameCall;
String callSignature; String callSignature;
if (isSpecialCall) { if (isSpecialCall) {
className = "org/mozilla/javascript/ScriptRuntime"; className = "org/mozilla/javascript/ScriptRuntime";
methodNameNewObj = "newObjectSpecial"; if (type == TokenStream.NEW) {
methodNameCall = "callSpecial"; methodName = "newObjectSpecial";
if (type != TokenStream.NEW) { callSignature = "(Lorg/mozilla/javascript/Context;"
callSignature = "(Lorg/mozilla/javascript/Context;" + +"Ljava/lang/Object;"
"Ljava/lang/Object;" + +"[Ljava/lang/Object;"
"Ljava/lang/Object;" + +"Lorg/mozilla/javascript/Scriptable;"
"[Ljava/lang/Object;" + +")Lorg/mozilla/javascript/Scriptable;";
"Lorg/mozilla/javascript/Scriptable;" + aload(variableObjectLocal);
"Lorg/mozilla/javascript/Scriptable;" + } else {
"Ljava/lang/String;I)"; // filename & linenumber methodName = "callSpecial";
callSignature = "(Lorg/mozilla/javascript/Context;"
+"Ljava/lang/Object;"
+"Ljava/lang/Object;"
+"[Ljava/lang/Object;"
+"Lorg/mozilla/javascript/Scriptable;"
+"Lorg/mozilla/javascript/Scriptable;"
+"Ljava/lang/String;I" // filename, linenumber
+")Ljava/lang/Object;";
aload(thisObjLocal); aload(thisObjLocal);
aload(variableObjectLocal); aload(variableObjectLocal);
push(itsSourceFile == null ? "" : itsSourceFile); push(itsSourceFile == null ? "" : itsSourceFile);
push(itsLineNumber); push(itsLineNumber);
} else {
callSignature = "(Lorg/mozilla/javascript/Context;" +
"Ljava/lang/Object;" +
"[Ljava/lang/Object;" +
"Lorg/mozilla/javascript/Scriptable;)";
aload(variableObjectLocal);
} }
} else { } else if (isSimpleCall) {
methodNameNewObj = "newObject";
if (isSimpleCall) {
callSignature = "(Lorg/mozilla/javascript/Context;" +
"Ljava/lang/String;" +
"Lorg/mozilla/javascript/Scriptable;" +
"[Ljava/lang/Object;)";
methodNameCall = "callSimple";
className = "org/mozilla/javascript/optimizer/OptRuntime"; className = "org/mozilla/javascript/optimizer/OptRuntime";
methodName = "callSimple";
callSignature = "(Lorg/mozilla/javascript/Context;"
+"Ljava/lang/String;"
+"Lorg/mozilla/javascript/Scriptable;"
+"[Ljava/lang/Object;"
+")Ljava/lang/Object;";
} else { } else {
className = "org/mozilla/javascript/ScriptRuntime";
aload(variableObjectLocal); aload(variableObjectLocal);
if (type == TokenStream.NEW) { if (type == TokenStream.NEW) {
callSignature = "(Lorg/mozilla/javascript/Context;" + methodName = "newObject";
"Ljava/lang/Object;" + callSignature = "(Lorg/mozilla/javascript/Context;"
"[Ljava/lang/Object;" + +"Ljava/lang/Object;"
"Lorg/mozilla/javascript/Scriptable;)"; +"[Ljava/lang/Object;"
+"Lorg/mozilla/javascript/Scriptable;"
+")Lorg/mozilla/javascript/Scriptable;";
} else { } else {
callSignature = "(Lorg/mozilla/javascript/Context;" + methodName = "call";
"Ljava/lang/Object;" + callSignature = "(Lorg/mozilla/javascript/Context;"
"Ljava/lang/Object;" + +"Ljava/lang/Object;"
"[Ljava/lang/Object;" + +"Ljava/lang/Object;"
"Lorg/mozilla/javascript/Scriptable;)"; +"[Ljava/lang/Object;"
} +"Lorg/mozilla/javascript/Scriptable;"
methodNameCall = "call"; +")Ljava/lang/Object;";
className = "org/mozilla/javascript/ScriptRuntime";
} }
} }
if (type == TokenStream.NEW) { addStaticInvoke(className, methodName, callSignature);
addStaticInvoke(className,
methodNameNewObj,
callSignature
+"Lorg/mozilla/javascript/Scriptable;");
} else {
addStaticInvoke(className,
methodNameCall,
callSignature
+"Ljava/lang/Object;");
}
} }
private void visitStatement(Node node) private void visitStatement(Node node)