Skip to content
Snippets Groups Projects
Commit 25dd1f98 authored by Florian Angerer's avatar Florian Angerer
Browse files

Storing evaluated args in locals.

parent 2d7c6bf2
Branches
No related tags found
No related merge requests found
...@@ -242,7 +242,8 @@ public abstract class InternalNode extends OperatorNode { ...@@ -242,7 +242,8 @@ public abstract class InternalNode extends OperatorNode {
protected Object[] prepareArgs(VirtualFrame frame) { protected Object[] prepareArgs(VirtualFrame frame) {
Object[] args = new Object[arguments.length]; Object[] args = new Object[arguments.length];
for (int i = 0; i < args.length; i++) { 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; return args;
} }
...@@ -300,11 +301,13 @@ public abstract class InternalNode extends OperatorNode { ...@@ -300,11 +301,13 @@ public abstract class InternalNode extends OperatorNode {
Object[] args = new Object[factory.getSignature().getLength()]; Object[] args = new Object[factory.getSignature().getLength()];
for (int i = 0; i < args.length - 1; i++) { 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)]; Object[] varArgs = new Object[arguments.length - (factory.getSignature().getLength() - 1)];
for (int i = 0; i < varArgs.length; i++) { 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)); args[args.length - 1] = new RArgsValuesAndNames(varArgs, ArgumentsSignature.empty(varArgs.length));
return args; return args;
......
...@@ -540,10 +540,10 @@ public abstract class PromiseNode extends RNode { ...@@ -540,10 +540,10 @@ public abstract class PromiseNode extends RNode {
evaluatedArgs[i] = argValue; evaluatedArgs[i] = argValue;
} else { } else {
size++; size++;
evaluatedArgs[i] = promiseCheckHelper.checkEvaluate(frame, argValue); Object arg = promiseCheckHelper.checkEvaluate(frame, argValue);
evaluatedArgs[i] = arg;
} }
if (evaluatedArgs[i] == null) { if (evaluatedArgs[i] == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
throw RInternalError.shouldNotReachHere("evaluated argument must not be null"); throw RInternalError.shouldNotReachHere("evaluated argument must not be null");
} }
} }
...@@ -565,10 +565,10 @@ public abstract class PromiseNode extends RNode { ...@@ -565,10 +565,10 @@ public abstract class PromiseNode extends RNode {
evaluatedArgs[i] = argValue; evaluatedArgs[i] = argValue;
} else { } else {
size++; size++;
evaluatedArgs[i] = promiseCheckHelper.checkEvaluate(frame, argValue); Object arg = promiseCheckHelper.checkEvaluate(frame, argValue);
evaluatedArgs[i] = arg;
} }
if (evaluatedArgs[i] == null) { if (evaluatedArgs[i] == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
throw RInternalError.shouldNotReachHere("evaluated argument must not be null"); throw RInternalError.shouldNotReachHere("evaluated argument must not be null");
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment