public Object callMethod(Object receiver, String methodName, Block block, Object... args) {
try {
if (args.length == 0) {
throw new IllegalArgumentException("needs at least one argument in a method");
}
RubyObject rubyReceiver = getReceiverObject(receiver);
return call(MethodType.CALLMETHOD_WITHBLOCK, Object.class, rubyReceiver, methodName, block, null, args);
} catch (InvokeFailedException e) {
throw e;
} catch (Throwable e) {
throw new InvokeFailedException(e);