diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java index f6a101e149dab4e47ce4ee036603b8643db9eb9f..1bf4c9fcea7536b40a4f6823587a97eaded66f77 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java @@ -191,6 +191,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta } public Object execute(VirtualFrame frame, Frame variableFrame) { + assert frame != null; return executeInternal(frame, kind == ReadKind.Super ? superEnclosingFrameProfile.profile(RArguments.getEnclosingFrame(variableFrame)) : variableFrame); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java index 69037c6399a16f843fe699d9e9199287543b6f78..516a88ad1537d6d600a75df1ddb2a1e98337caf6 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java @@ -170,7 +170,6 @@ abstract class S4Class extends RBaseNode { public abstract RStringVector executeRStringVector(String classAttr); - @Child private ReadVariableNode sExtendsForS3Find = ReadVariableNode.createFunctionLookup(RSyntaxNode.INTERNAL, ".extendsForS3"); @Child private CastToVectorNode castToVector = CastToVectorNode.create(); @TruffleBoundary @@ -180,8 +179,8 @@ abstract class S4Class extends RBaseNode { RStringVector s4Extends = RContext.getInstance().getS4Extends(classAttr); if (s4Extends == null) { REnvironment methodsEnv = REnvironment.getRegisteredNamespace("methods"); - RFunction sExtendsForS3Function = (RFunction) sExtendsForS3Find.execute(null, methodsEnv.getFrame()); - // the assumption here is that R function can only return either a String or + RFunction sExtendsForS3Function = ReadVariableNode.lookupFunction(".extendsForS3", methodsEnv.getFrame(), false); + // the assumption here is that the R function can only return either a String or // RStringVector s4Extends = (RStringVector) castToVector.execute(RContext.getEngine().evalFunction(sExtendsForS3Function, methodsEnv.getFrame(), classAttr)); RContext.getInstance().putS4Extends(classAttr, s4Extends); 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 342c1c1a3d049fbe6c8321862e5b57364d4d36d8..71553ad110b389ef808a201541698de6ea1c892c 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 @@ -297,7 +297,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { if ((genericIdentityProfile.profile(genericName != cachedGenericName) && !cachedGenericName.equals(genericName)) || !isEqualType(type) || group != cachedGroup) { return next.execute(frame, genericName, type, group, callerFrame, genericDefFrame); } - if (!executeReads(unsuccessfulReadsCallerFrame, callerFrame)) { + if (!executeReads(frame, unsuccessfulReadsCallerFrame, callerFrame)) { break; } REnvironment methodsTable; @@ -311,7 +311,7 @@ public abstract class S3FunctionLookupNode extends RBaseNode { } if (successfulRead != null || successfulReadTable != null) { - Object actualFunction = successfulRead != null ? successfulRead.execute(null, callerFrame) : successfulReadTable.execute(null, methodsTable.getFrame()); + Object actualFunction = successfulRead != null ? successfulRead.execute(frame, callerFrame) : successfulReadTable.execute(frame, methodsTable.getFrame()); if (actualFunction != result.function) { break; } @@ -331,9 +331,9 @@ public abstract class S3FunctionLookupNode extends RBaseNode { } @ExplodeLoop - private static boolean executeReads(ReadVariableNode[] reads, Frame callerFrame) { + private static boolean executeReads(VirtualFrame frame, ReadVariableNode[] reads, Frame callerFrame) { for (ReadVariableNode read : reads) { - if (read.execute(null, callerFrame) != null) { + if (read.execute(frame, callerFrame) != null) { CompilerDirectives.transferToInterpreterAndInvalidate(); return false; } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java index 3f7cfee8b4ab7a915e5e5e7814141b0290cc3ae2..f11df1e5baaacd88078af09ba8fdf1f8b8495c5d 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/LoadMethod.java @@ -119,7 +119,7 @@ abstract class LoadMethod extends RBaseNode { if (loadMethodFind == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); loadMethodFind = insert(ReadVariableNode.createFunctionLookup(RSyntaxNode.INTERNAL, RRuntime.R_LOAD_METHOD_NAME)); - currentFunction = (RFunction) loadMethodFind.execute(null, methodsEnv.getFrame()); + currentFunction = (RFunction) loadMethodFind.execute(frame, methodsEnv.getFrame()); loadMethodFunction = currentFunction; loadMethodCall = insert(Truffle.getRuntime().createDirectCallNode(loadMethodFunction.getTarget())); RError.performanceWarning("loadMethod executing slow path");