private void GenerateFunctionInit(ClassFileWriter cfw, OptFunctionNode ofn)
{
int CONTEXT_ARG = 1;
int SCOPE_ARG = 2;
cfw.StartMethod(GetFunctionInitMethodName(ofn), FUNCTION_INIT_SIGNATURE, (short)(ClassFileWriter.ACC_PRIVATE | ClassFileWriter.ACC_FINAL));
// Call NativeFunction.initScriptFunction
cfw.AddLoadThis();
cfw.AddALoad(CONTEXT_ARG);
cfw.AddALoad(SCOPE_ARG);
cfw.AddInvoke(ByteCode.INVOKEVIRTUAL, "org/mozilla/javascript/NativeFunction", "initScriptFunction", "(Lorg/mozilla/javascript/Context;" + "Lorg/mozilla/javascript/Scriptable;" + ")V");
// precompile all regexp literals
if (ofn.fnode.GetRegexpCount() != 0)
{
cfw.AddALoad(CONTEXT_ARG);
cfw.AddInvoke(ByteCode.INVOKESTATIC, mainClassName, REGEXP_INIT_METHOD_NAME, REGEXP_INIT_METHOD_SIGNATURE);
}
cfw.Add(ByteCode.RETURN);
// 3 = (scriptThis/functionRef) + scope + context
cfw.StopMethod((short)3);
}