/* invoke(Context, int, Any[]) */
{
Method method = clazz.createMethod("invoke",
"(Lanvil/script/Context;I[Lanvil/core/Any;)Lanvil/core/Any;", Code.ACC_PUBLIC);
Code code = method.getCode();
ConstantPool pool = code.getPool();
context.pushCode(code);
int l_context = code.addLocal();
int l_index = code.addLocal();
int l_parameters = code.addLocal();
int l_length = code.addLocal();
int l_newparameters = code.addLocal();
code.aload(l_parameters);
code.arraylength();
code.istore(l_length);
code.iload(l_length);
code.iconst(1);
code.iadd();
code.anewarray(context.TYPE_ANY);
code.astore(l_newparameters);
code.aload(l_parameters);
code.iconst(0);
code.aload(l_newparameters);
code.iconst(1);
code.iload(l_length);
code.invokestatic(pool.addMethodRef("java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V"));
code.aload(l_newparameters);
code.iconst(0);
code.iload(l_index);
code.invokestatic(pool.addMethodRef("anvil/core/Register", "getAnyNameOf", "(I)Lanvil/core/Any;"));
code.aastore();
code.getstatic(pool.addFieldRef(clazz.getIndex(), "m_"+function.getName(), "Lanvil/script/Function;"));
code.aload(l_context);
code.self();
code.aload(l_newparameters);
code.invokeinterface(pool.addInterfaceMethodRef("anvil/script/Function",
"execute", "(Lanvil/script/Context;Lanvil/core/Any;[Lanvil/core/Any;)Lanvil/core/Any;"));
code.areturn();
context.popCode();
}
for(int i=0; i<4; i++) {
Method method = clazz.createMethod("invoke", INVOKE_SIGNATURES[i], Code.ACC_PUBLIC);
Node[] params = new Node[1 + i];
params[0] = P2_TO_SYMBOL;
for(int j=0; j<i; j++) {
params[j+1] = new ParameterNode(3 + j);
}
compileCallback(context, function, method, false, 3+i, params, 0, 2);
}
/* invoke(Context, int, Any, Any, Any, Any) */
{
Method method = clazz.createMethod("invoke", INVOKE_SIGNATURES[4], Code.ACC_PUBLIC);
Code code = method.getCode();
ConstantPool pool = code.getPool();
context.pushCode(code);
int l_context = code.addLocal();
int l_index = code.addLocal();
int l_base = code.addLocal();
code.addLocals(3);
code.getstatic(pool.addFieldRef(clazz.getIndex(), "m_"+function.getName(), "Lanvil/script/Function;"));
code.aload(l_context);
code.self();
code.iconst(5);
code.anewarray(context.TYPE_ANY);
code.dup();
code.iconst(0);
code.iload(l_index);
code.invokestatic(pool.addMethodRef("anvil/core/Register", "getNameOf", "(I)Ljava/lang/String;"));
code.invokestatic(pool.addMethodRef(context.TYPE_ANY, "create", "(Ljava/lang/String;)Lanvil/core/Any;"));
code.aastore();
for(int i=0; i<4; i++) {
code.dup();
code.iconst(i+1);
code.aload(l_base + i);
code.aastore();
}
code.invokeinterface(pool.addInterfaceMethodRef("anvil/script/Function",
"execute", "(Lanvil/script/Context;Lanvil/core/Any;[Lanvil/core/Any;)Lanvil/core/Any;"));
code.areturn();
context.popCode();
}