From 9db8d2393718a32c95bdbd99a0ddfd51deeb6e9b Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Thu, 14 Dec 2017 12:06:36 +0100
Subject: [PATCH] Do not hold reference to REngine in AnonymousRootNode

---
 .../com/oracle/truffle/r/engine/REngine.java   | 18 ++++++++++++------
 mx.fastr/suite.py                              |  2 +-
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
index 3fc8de06e5..e457130ddb 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
@@ -533,7 +533,7 @@ final class REngine implements Engine, Engine.Timings {
      */
     @TruffleBoundary
     private RootCallTarget doMakeCallTarget(RNode body, String description, boolean printResult, boolean topLevel) {
-        return Truffle.getRuntime().createCallTarget(new AnonymousRootNode(body, description, printResult, topLevel));
+        return Truffle.getRuntime().createCallTarget(new AnonymousRootNode(this, body, description, printResult, topLevel));
     }
 
     /**
@@ -544,7 +544,7 @@ final class REngine implements Engine, Engine.Timings {
      * context of that frame. Note that passing only this one frame argument, strictly spoken,
      * violates the frame layout as set forth in {@link RArguments}. This is for internal use only.
      */
-    private final class AnonymousRootNode extends RootNode implements RootWithBody {
+    private static final class AnonymousRootNode extends RootNode implements RootWithBody {
 
         private final ValueProfile frameTypeProfile = ValueProfile.createClassProfile();
         private final ConditionProfile isVirtualFrameProfile = ConditionProfile.createBinaryProfile();
@@ -552,13 +552,15 @@ final class REngine implements Engine, Engine.Timings {
         private final String description;
         private final boolean printResult;
         private final boolean topLevel;
+        private final boolean suppressWarnings;
 
         @Child private RNode body;
         @Child private GetVisibilityNode visibility = GetVisibilityNode.create();
         @Child private SetVisibilityNode setVisibility = SetVisibilityNode.create();
 
-        protected AnonymousRootNode(RNode body, String description, boolean printResult, boolean topLevel) {
-            super(context.getLanguage());
+        protected AnonymousRootNode(REngine engine, RNode body, String description, boolean printResult, boolean topLevel) {
+            super(engine.context.getLanguage());
+            this.suppressWarnings = engine.suppressWarnings;
             this.body = body;
             this.description = description;
             this.printResult = printResult;
@@ -597,7 +599,7 @@ final class REngine implements Engine, Engine.Timings {
                 if (printResult && result != null) {
                     assert topLevel;
                     if (visibility.execute(vf)) {
-                        printResult(result);
+                        printResultImpl(result);
                     }
                 }
                 if (topLevel) {
@@ -665,8 +667,12 @@ final class REngine implements Engine, Engine.Timings {
     }
 
     @Override
-    @TruffleBoundary
     public void printResult(Object originalResult) {
+        printResultImpl(originalResult);
+    }
+
+    @TruffleBoundary
+    static void printResultImpl(Object originalResult) {
         Object result = evaluatePromise(originalResult);
         result = RRuntime.asAbstractVector(result);
         if (result instanceof RTypedValue || result instanceof TruffleObject) {
diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py
index 2027fdf996..edde805aec 100644
--- a/mx.fastr/suite.py
+++ b/mx.fastr/suite.py
@@ -29,7 +29,7 @@ suite = {
             {
                "name" : "truffle",
                "subdir" : True,
-               "version" : "05b61f9fa9dceebec447f3ec3656c8cc5be215dd",
+               "version" : "b29a94a6738f96c33be981681b69216a1664eb8a",
                "urls" : [
                     {"url" : "https://github.com/graalvm/graal", "kind" : "git"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},
-- 
GitLab