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 98257aacce7f7dcbbfba7046936ea787652cb8f0..e586514fd40b7edc29e0032580acd2088be19fa1 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 a0885395fdbcdeb7338b92796840afd50eb0bf7f..b32e60821d0c3486273a0bf49c082d6311db437e 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 2e867d308647cce6bfdb76a499c4e95261cfeb45..ac6079435a58436bed6d286fe3e30f23d5048c51 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 725759b14b7099b48061e32f878c82a1c1979123..3bde24d972d2b00ced260ed4ecc68e2bd96ab7a7 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"},