public CachedBoxedSymbolDispatchNode( RubyContext context, Object cachedName, DispatchNode next, Object value, RubyMethod method) { super(context, cachedName, next); unmodifiedAssumption = context.getCoreLibrary().getSymbolClass().getUnmodifiedAssumption(); this.value = value; this.method = method; if (method != null) { callNode = Truffle.getRuntime().createDirectCallNode(method.getCallTarget()); } }
@Override public Object dispatch(VirtualFrame frame, RubyProc block, Object[] argumentsObjects) { final RubyMethod method = block.getMethod(); return callNode.call( frame, method.getCallTarget(), RubyArguments.pack( method.getDeclarationFrame(), block.getSelfCapturedInScope(), block.getBlockCapturedInScope(), argumentsObjects)); }