diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java index 82340bf9e9f7dc2344c446c77a9b7a17de087656..3faef1fa51cf274acff388d140af5cbb59415e10 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java @@ -459,7 +459,10 @@ public abstract class RCallNode extends RNode { } @Override + @SlowPath public Object execute(VirtualFrame frame, RFunction currentFunction) { + CompilerDirectives.transferToInterpreter(); + if (lastCallTarget == currentFunction.getTarget() && lastMatchedArgs != null) { // poor man's caching succeeded - same function: no re-match needed Object[] argsObject = RArguments.create(currentFunction, getSourceSection(), lastMatchedArgs.doExecuteArray(frame), lastMatchedArgs.getNames()); @@ -639,7 +642,7 @@ public abstract class RCallNode extends RNode { @Override @SlowPath public Object execute(VirtualFrame frame, RFunction currentFunction) { - CompilerAsserts.neverPartOfCompilation(); + CompilerDirectives.transferToInterpreter(); // Function and arguments may change every call: Flatt'n'Match on SlowPath! :-/ UnrolledVariadicArguments argsValuesAndNames = suppliedArgs.executeFlatten(frame);