diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java index 59f8e137407371489ff75d290648b83bf1eeb627..379d3db97ade1ad8effe85a433bdbd2a45d7e2bd 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java @@ -95,6 +95,11 @@ public final class RBuiltinRootNode extends RRootNode { initialize(); Object[] arguments = new Object[args.length]; for (int i = 0; i < args.length; i++) { + if (args[i] == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + args[i] = insert(AccessArgumentNode.create(i)); + args[i].setFormals(call.getFormals()); + } arguments[i] = args[i].execute(frame); } return call.execute(frame, null, new RArgsValuesAndNames(arguments, factory.getSignature()), null); @@ -117,10 +122,6 @@ public final class RBuiltinRootNode extends RRootNode { assert factory.getSignature().getVarArgCount() == 0 || factory.getSignature().getVarArgIndex() == factory.getSignature().getLength() - 1 : "only last argument can be vararg"; } call = insert(new BuiltinCallNode(builtin, factory, formalArguments, null, true)); - for (int i = 0; i < args.length; i++) { - args[i] = insert(AccessArgumentNode.create(i)); - args[i].setFormals(formalArguments); - } } }