From e89ba9763aca200b20c84c697e4bdfc514ab1a0c Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Wed, 28 Dec 2016 14:34:53 +0100
Subject: [PATCH] update Truffle dependency

---
 .../com/oracle/truffle/r/engine/REngine.java    | 10 ++++++----
 .../truffle/r/engine/TruffleRLanguage.java      | 17 +++++------------
 .../truffle/r/runtime/context/Engine.java       |  2 +-
 mx.fastr/suite.py                               |  2 +-
 4 files changed, 13 insertions(+), 18 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 98257aacce..e586514fd4 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
@@ -293,9 +293,9 @@ final class REngine implements Engine, Engine.Timings {
     }
 
     @Override
-    public CallTarget parseToCallTarget(Source source) throws ParseException {
+    public CallTarget parseToCallTarget(Source source, MaterializedFrame executionFrame) throws ParseException {
         List<RSyntaxNode> statements = parseImpl(source);
-        return Truffle.getRuntime().createCallTarget(new PolyglotEngineRootNode(statements, createSourceSection(statements)));
+        return Truffle.getRuntime().createCallTarget(new PolyglotEngineRootNode(statements, createSourceSection(statements), executionFrame));
     }
 
     private static SourceSection createSourceSection(List<RSyntaxNode> statements) {
@@ -311,16 +311,18 @@ final class REngine implements Engine, Engine.Timings {
     private final class PolyglotEngineRootNode extends RootNode {
 
         private final List<RSyntaxNode> statements;
+        private final MaterializedFrame executionFrame;
         @Children private final DirectCallNode[] calls;
         private final boolean printResult;
 
         @Child private Node findContext = TruffleRLanguage.INSTANCE.actuallyCreateFindContextNode();
 
-        PolyglotEngineRootNode(List<RSyntaxNode> statements, SourceSection sourceSection) {
+        PolyglotEngineRootNode(List<RSyntaxNode> statements, SourceSection sourceSection, MaterializedFrame executionFrame) {
             super(TruffleRLanguage.class, sourceSection, new FrameDescriptor());
             // can't print if initializing the system in embedded mode (no builtins yet)
             this.printResult = !sourceSection.getSource().getName().equals(RSource.Internal.INIT_EMBEDDED.string);
             this.statements = statements;
+            this.executionFrame = executionFrame;
             this.calls = new DirectCallNode[statements.size()];
         }
 
@@ -343,7 +345,7 @@ final class REngine implements Engine, Engine.Timings {
                         CompilerDirectives.transferToInterpreterAndInvalidate();
                         calls[i] = insert(Truffle.getRuntime().createDirectCallNode(doMakeCallTarget(node.asRNode(), RSource.Internal.REPL_WRAPPER.string, printResult, true)));
                     }
-                    lastValue = calls[i].call(frame, new Object[]{newContext.stateREnvironment.getGlobalFrame()});
+                    lastValue = calls[i].call(frame, new Object[]{executionFrame != null ? executionFrame : newContext.stateREnvironment.getGlobalFrame()});
                 }
                 return lastValue;
             } catch (ReturnException ex) {
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
index a0885395fd..b32e60821d 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
@@ -25,18 +25,16 @@ package com.oracle.truffle.r.engine;
 import java.util.Locale;
 
 import com.oracle.truffle.api.CallTarget;
-import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.frame.FrameDescriptor;
-import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.instrumentation.Instrumenter;
 import com.oracle.truffle.api.instrumentation.ProvidedTags;
 import com.oracle.truffle.api.instrumentation.StandardTags;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.RootNode;
-import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.r.engine.interop.RForeignAccessFactoryImpl;
 import com.oracle.truffle.r.nodes.RASTBuilder;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinPackages;
@@ -139,13 +137,13 @@ public final class TruffleRLanguage extends TruffleLanguage<RContext> {
         return null;
     }
 
-    @Override
-    @TruffleBoundary
     @SuppressWarnings("try")
-    protected CallTarget parse(Source source, Node context, String... argumentNames) throws com.oracle.truffle.api.vm.IncompleteSourceException {
+    @Override
+    protected CallTarget parse(ParsingRequest request) throws Exception {
+        CompilerAsserts.neverPartOfCompilation();
         try (RCloseable c = RContext.withinContext(findContext(createFindContextNode()))) {
             try {
-                return RContext.getEngine().parseToCallTarget(source);
+                return RContext.getEngine().parseToCallTarget(request.getSource(), request.getFrame());
             } catch (IncompleteSourceException e) {
                 throw new com.oracle.truffle.api.vm.IncompleteSourceException(e);
             } catch (ParseException e) {
@@ -189,9 +187,4 @@ public final class TruffleRLanguage extends TruffleLanguage<RContext> {
     public RContext actuallyFindContext0(Node contextNode) {
         return findContext(contextNode);
     }
-
-    @Override
-    protected Object evalInContext(Source source, Node node, MaterializedFrame frame) {
-        return RContext.getEngine().parseAndEval(source, frame, false);
-    }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
index 2e867d3086..ac6079435a 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java
@@ -126,7 +126,7 @@ public interface Engine {
      * return a {@link CallTarget} which may be cached for future use, and the
      * {@link PolyglotEngine} is responsible for actually invoking the call target.
      */
-    CallTarget parseToCallTarget(Source source) throws ParseException;
+    CallTarget parseToCallTarget(Source source, MaterializedFrame executionFrame) throws ParseException;
 
     /**
      * Parse and evaluate {@code rscript} in {@code frame}. {@code printResult == true}, the result
diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py
index 725759b14b..3bde24d972 100644
--- a/mx.fastr/suite.py
+++ b/mx.fastr/suite.py
@@ -28,7 +28,7 @@ suite = {
     "suites" : [
             {
                "name" : "truffle",
-               "version" : "13641c9f68eefccd0099d283ca25d6bb44b3349a",
+               "version" : "720bba917bc2907b9e6620365a1b3c66e2ad3cc6",
                "urls" : [
                     {"url" : "https://github.com/graalvm/truffle", "kind" : "git"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},
-- 
GitLab