diff --git a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java index 8f37a447c..ce3df3490 100644 --- a/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java +++ b/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/ControlPrimitives.java @@ -1190,6 +1190,16 @@ protected static final Object doExecute(final VirtualFrame frame, final Object r @Cached final GetOrCreateContextOrMarkerNode senderNode, @Cached final IndirectCallNode callNode) { final Object[] arguments = arrayNode.execute(node, argArray); + if (method.hasPrimitive()) { + final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNode(); + if (primitiveNode != null) { + try { + return primitiveNode.executeWithArguments(frame, receiver, arguments); + } catch (final PrimitiveFailed pf) { + DispatchUtils.handlePrimitiveFailedIndirect(node, primitiveNode, method, pf); + } + } + } return callNode.call(method.getCallTarget(), FrameAccess.newWith(senderNode.execute(frame, node, method), null, receiver, arguments)); } } @@ -1218,6 +1228,16 @@ protected static final Object doExecute(final VirtualFrame frame, @SuppressWarni @Cached final GetOrCreateContextOrMarkerNode senderNode, @Cached final IndirectCallNode callNode) { final Object[] arguments = arrayNode.execute(node, argArray); + if (method.hasPrimitive()) { + final AbstractPrimitiveNode primitiveNode = method.getPrimitiveNode(); + if (primitiveNode != null) { + try { + return primitiveNode.executeWithArguments(frame, receiver, arguments); + } catch (final PrimitiveFailed pf) { + DispatchUtils.handlePrimitiveFailedIndirect(node, primitiveNode, method, pf); + } + } + } return callNode.call(method.getCallTarget(), FrameAccess.newWith(senderNode.execute(frame, node, method), null, receiver, arguments)); } }