mv.invokevirtual(p(DynamicMethod.class), "call", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject[].class, Block.class));
// if we expect a return value, unwrap it
if (method.getReturnType() != void.class) {
mv.invokestatic(p(MiniJava.class), "rubyToJava", sig(Object.class, IRubyObject.class));
mv.checkcast(p(returnType));
mv.areturn();
} else {
mv.voidreturn();
}