diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java index 3be03b99133e8b48791416edae3f4fbcfcbdcb0b..1139df347c88ba98ffad02fb0074ffca2aa536b4 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/InternalNode.java @@ -242,7 +242,8 @@ public abstract class InternalNode extends OperatorNode { protected Object[] prepareArgs(VirtualFrame frame) { Object[] args = new Object[arguments.length]; for (int i = 0; i < args.length; i++) { - args[i] = arguments[i].execute(frame); + Object execute = arguments[i].execute(frame); + args[i] = execute; } return args; } @@ -300,11 +301,13 @@ public abstract class InternalNode extends OperatorNode { Object[] args = new Object[factory.getSignature().getLength()]; for (int i = 0; i < args.length - 1; i++) { - args[i] = arguments[i].execute(frame); + Object arg = arguments[i].execute(frame); + args[i] = arg; } Object[] varArgs = new Object[arguments.length - (factory.getSignature().getLength() - 1)]; for (int i = 0; i < varArgs.length; i++) { - varArgs[i] = arguments[args.length - 1 + i].execute(frame); + Object arg = arguments[args.length - 1 + i].execute(frame); + varArgs[i] = arg; } args[args.length - 1] = new RArgsValuesAndNames(varArgs, ArgumentsSignature.empty(varArgs.length)); return args; diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java index c3a0a12254405c034ad0cbd1c12137c5ebe61d76..4421b005683f46460eac43bb97e732a92401b227 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java @@ -540,10 +540,10 @@ public abstract class PromiseNode extends RNode { evaluatedArgs[i] = argValue; } else { size++; - evaluatedArgs[i] = promiseCheckHelper.checkEvaluate(frame, argValue); + Object arg = promiseCheckHelper.checkEvaluate(frame, argValue); + evaluatedArgs[i] = arg; } if (evaluatedArgs[i] == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); throw RInternalError.shouldNotReachHere("evaluated argument must not be null"); } } @@ -565,10 +565,10 @@ public abstract class PromiseNode extends RNode { evaluatedArgs[i] = argValue; } else { size++; - evaluatedArgs[i] = promiseCheckHelper.checkEvaluate(frame, argValue); + Object arg = promiseCheckHelper.checkEvaluate(frame, argValue); + evaluatedArgs[i] = arg; } if (evaluatedArgs[i] == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); throw RInternalError.shouldNotReachHere("evaluated argument must not be null"); } }