diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java index 71553ad110b389ef808a201541698de6ea1c892c..256121fac1b8cbef61921677994e72deaa0d943b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/S3FunctionLookupNode.java @@ -170,7 +170,8 @@ public abstract class S3FunctionLookupNode extends RBaseNode { public abstract S3FunctionLookupNode.Result execute(VirtualFrame frame, String genericName, RStringVector type, String group, MaterializedFrame callerFrame, MaterializedFrame genericDefFrame); - private static UseMethodFunctionLookupCachedNode specialize(String genericName, RStringVector type, String group, MaterializedFrame callerFrame, MaterializedFrame genericDefFrame, + private static UseMethodFunctionLookupCachedNode specialize(VirtualFrame frame, String genericName, RStringVector type, String group, MaterializedFrame callerFrame, + MaterializedFrame genericDefFrame, S3FunctionLookupNode next) { ArrayList<ReadVariableNode> unsuccessfulReadsCaller = new ArrayList<>(); ArrayList<LocalReadVariableNode> unsuccessfulReadsTable = new ArrayList<>(); @@ -185,7 +186,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { Object result; if (inMethodsTable) { LocalReadVariableNode read = LocalReadVariableNode.create(name, true); - result = read.execute(null, lookupFrame); + result = read.execute(frame, lookupFrame); if (result == null) { unsuccessfulReadsTable.add(read); } else { @@ -193,7 +194,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { } } else { ReadVariableNode read = ReadVariableNode.createSilent(name, RType.Function); - result = read.execute(null, lookupFrame); + result = read.execute(frame, lookupFrame); if (result == null) { unsuccessfulReadsCaller.add(read); } else { @@ -206,7 +207,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { GetMethodsTable getTable = () -> { if (genericDefFrame != null) { reads.methodsTableRead = LocalReadVariableNode.create(RRuntime.RS3MethodsTable, true); - return reads.methodsTableRead.execute(null, genericDefFrame); + return reads.methodsTableRead.execute(frame, genericDefFrame); } else { return null; } @@ -241,7 +242,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { if (++depth > MAX_CACHE_DEPTH) { return replace(new UseMethodFunctionLookupGenericNode(throwsError, nextMethod)).execute(frame, genericName, type, group, callerFrame, genericDefFrame); } else { - UseMethodFunctionLookupCachedNode cachedNode = replace(specialize(genericName, type, group, callerFrame, genericDefFrame, this)); + UseMethodFunctionLookupCachedNode cachedNode = replace(specialize(frame, genericName, type, group, callerFrame, genericDefFrame, this)); return cachedNode.execute(frame, genericName, type, group, callerFrame, genericDefFrame); } } @@ -327,7 +328,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { } } while (true); CompilerDirectives.transferToInterpreterAndInvalidate(); - return replace(specialize(genericName, type, group, callerFrame, genericDefFrame, next)).execute(frame, genericName, type, group, callerFrame, genericDefFrame); + return replace(specialize(frame, genericName, type, group, callerFrame, genericDefFrame, next)).execute(frame, genericName, type, group, callerFrame, genericDefFrame); } @ExplodeLoop