public static MethodHandle wrapWithFraming(Signature signature, CallConfiguration callConfig, RubyModule implClass, String name, MethodHandle nativeTarget, StaticScope scope) { MethodHandle framePre = getFramePre(signature, callConfig, implClass, name, scope); if (framePre != null) { MethodHandle framePost = getFramePost(signature, callConfig); // break, return, redo handling boolean heapScoped = callConfig.scoping() != Scoping.None; boolean framed = callConfig.framing() != Framing.None; // post logic for frame nativeTarget = Binder .from(nativeTarget.type()) .tryFinally(framePost) .invoke(nativeTarget); // pre logic for frame nativeTarget = foldArguments(nativeTarget, framePre); // call polling and call number increment nativeTarget = Binder .from(nativeTarget.type()) .fold(Binder .from(nativeTarget.type().changeReturnType(void.class)) .permute(0) .invokeStaticQuiet(lookup(), ThreadContext.class, "callThreadPoll")) .invoke(nativeTarget); } return nativeTarget; }
public static MethodHandle wrapWithFraming(Signature signature, CallConfiguration callConfig, RubyModule implClass, String name, MethodHandle nativeTarget, StaticScope scope) { MethodHandle framePre = getFramePre(signature, callConfig, implClass, name, scope); if (framePre != null) { MethodHandle framePost = getFramePost(signature, callConfig); // break, return, redo handling boolean heapScoped = callConfig.scoping() != Scoping.None; boolean framed = callConfig.framing() != Framing.None; // post logic for frame nativeTarget = Binder .from(nativeTarget.type()) .tryFinally(framePost) .invoke(nativeTarget); // pre logic for frame nativeTarget = foldArguments(nativeTarget, framePre); // call polling and call number increment nativeTarget = Binder .from(nativeTarget.type()) .fold(Binder .from(nativeTarget.type().changeReturnType(void.class)) .permute(0) .invokeStaticQuiet(lookup(), ThreadContext.class, "callThreadPoll")) .invoke(nativeTarget); } return nativeTarget; }
public static MethodHandle wrapWithFraming(Signature signature, CallConfiguration callConfig, RubyModule implClass, String name, MethodHandle nativeTarget, StaticScope scope) { MethodHandle framePre = getFramePre(signature, callConfig, implClass, name, scope);
public static MethodHandle wrapWithFraming(Signature signature, CallConfiguration callConfig, RubyModule implClass, String name, MethodHandle nativeTarget, StaticScope scope) { MethodHandle framePre = getFramePre(signature, callConfig, implClass, name, scope);