Class[] descriptor = new Class[] {arg1, arg2, arg3};
if (c == null) {
Class[] signature = new Class[] { RubyKernel.IRUBY_OBJECT, arg1, arg2, arg3, Block.class };
Class ret = getReturnClass(method, signature);
ClassWriter cw = createCtor(mnamePath);
MethodVisitor mv = startCallS(cw);
loadArguments(mv, METHOD_ARGS_INDEX, 3, descriptor);
mv.visitVarInsn(ALOAD, 3);
mv.visitMethodInsn(INVOKESTATIC, typePath, method, sig(ret, signature));
mv.visitInsn(ARETURN);
mv.visitMaxs(5, 3);
c = endCall(cw, mv, mname);
}
InvocationCallback ic = (InvocationCallback) c.newInstance();
ic.setArity(Arity.fixed(3));
ic.setArgumentTypes(descriptor);