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