}
@Override
public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block) {
if (block.isGiven()) {
JavaProxy proxy = castJavaProxy(self);
RubyProc proc = RubyProc.newProc(context.getRuntime(), block, Block.Type.LAMBDA);
JavaConstructor constructor = (JavaConstructor)findCallableArityFour(self, name, arg0, arg1, arg2, proc);
Object cArg0 = convertArg(arg0, constructor, 0);
Object cArg1 = convertArg(arg1, constructor, 1);
Object cArg2 = convertArg(arg2, constructor, 2);
Object cArg3 = convertArg(proc, constructor, 3);
proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1, cArg2, cArg3));
return self;
} else {
return call(context, self, clazz, name, arg0, arg1, arg2);
}