MethodType apparentType = methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature());
MethodType apparentType = methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature());
MethodType apparentType = methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature());
MethodType apparentType = methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature());
if (b.type().parameterCount() == nc.getNativeSignature().length) { mh = b .cast(nc.getNativeReturn(), nc.getNativeSignature()) .invokeStaticQuiet(MethodHandles.lookup(), nc.getNativeTarget(), nc.getNativeName()); .cast(MethodType.methodType(nc.getNativeReturn(), nc.getNativeTarget(), nc.getNativeSignature())) .invokeVirtualQuiet(MethodHandles.lookup(), nc.getNativeName());
if (b.type().parameterCount() == nc.getNativeSignature().length) { mh = b .cast(nc.getNativeReturn(), nc.getNativeSignature()) .invokeStaticQuiet(MethodHandles.lookup(), nc.getNativeTarget(), nc.getNativeName()); .cast(MethodType.methodType(nc.getNativeReturn(), nc.getNativeTarget(), nc.getNativeSignature())) .invokeVirtualQuiet(MethodHandles.lookup(), nc.getNativeName());
mh = binder .permute("context", "self", "arg.*", "block") // filter caller .cast(nc.getNativeReturn(), nc.getNativeSignature()) .invokeStaticQuiet(LOOKUP, nc.getNativeTarget(), nc.getNativeName()) .handle(); .permute("self", "context", "arg.*", "block") // filter caller, move self .castArg("self", nc.getNativeTarget()) .castVirtual(nc.getNativeReturn(), nc.getNativeTarget(), nc.getNativeSignature()) .invokeVirtualQuiet(LOOKUP, nc.getNativeName()) .handle();
mh = binder .permute("context", "self", "arg.*", "block") // filter caller .cast(nc.getNativeReturn(), nc.getNativeSignature()) .invokeStaticQuiet(LOOKUP, nc.getNativeTarget(), nc.getNativeName()) .handle(); .permute("self", "context", "arg.*", "block") // filter caller, move self .castArg("self", nc.getNativeTarget()) .castVirtual(nc.getNativeReturn(), nc.getNativeTarget(), nc.getNativeSignature()) .invokeVirtualQuiet(LOOKUP, nc.getNativeName()) .handle();
nativeCall.getNativeTarget(), nativeCall.getNativeName(), methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature())); } else { nativeCall.getNativeTarget(), nativeCall.getNativeName(), methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature())); if (nativeCall.getNativeReturn() == void.class) { nativeTarget = filterReturnValue(nativeTarget, constant(IRubyObject.class, runtime.getNil()));
nativeCall.getNativeTarget(), nativeCall.getNativeName(), methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature())); } else { nativeCall.getNativeTarget(), nativeCall.getNativeName(), methodType(nativeCall.getNativeReturn(), nativeCall.getNativeSignature())); if (nativeCall.getNativeReturn() == void.class) { nativeTarget = filterReturnValue(nativeTarget, constant(IRubyObject.class, runtime.getNil()));