From 6e9ff5d0f49cdf76ad8792503b4b1831f3157ff2 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Sun, 22 Jun 2014 21:50:48 -0700 Subject: [PATCH] encapsulate RPromise evaluation, add evaluate in frame --- .../com/oracle/truffle/r/engine/REngine.java | 21 +++++- .../lib/darwin/libRDerived.dylib | Bin 25064 -> 21008 bytes .../r/nodes/builtin/base/EvalFunctions.java | 4 +- .../truffle/r/nodes/function/PromiseNode.java | 2 +- .../oracle/truffle/r/runtime/RContext.java | 10 ++- .../truffle/r/runtime/data/RDataFactory.java | 12 +++- .../truffle/r/runtime/data/RPromise.java | 62 +++++++++++++----- 7 files changed, 86 insertions(+), 25 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 c5bcf37bf1..69e36da327 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 @@ -168,10 +168,14 @@ public final class REngine implements RContext.Engine { * on return. * * @param function the actual function that invoked the "eval", e.g. {@code eval}, {@code evalq} - * , {@code local}. + * , {@code local}, or {@code null} if identification isn't important. */ public Object eval(RFunction function, RLanguage expr, REnvironment envir, REnvironment enclos) throws PutException { - RootCallTarget callTarget = makeCallTarget((RNode) expr.getRep(), REnvironment.globalEnv()); + return eval(function, (RNode) expr.getRep(), envir, enclos); + } + + private static Object eval(RFunction function, RNode exprRep, REnvironment envir, @SuppressWarnings("unused") REnvironment enclos) throws PutException { + RootCallTarget callTarget = makeCallTarget(exprRep, REnvironment.globalEnv()); MaterializedFrame envFrame = envir.getFrame(); VirtualFrame vFrame = RRuntime.createVirtualFrame(); // We make the new frame look like it was a real call to "function". @@ -219,7 +223,18 @@ public final class REngine implements RContext.Engine { public Object evalPromise(RPromise expr, VirtualFrame frame) throws RError { RootCallTarget callTarget = makeCallTarget((RNode) expr.getRep(), REnvironment.emptyEnv()); - return expr.setValue(runCall(callTarget, frame, false, false)); + return runCall(callTarget, frame, false, false); + } + + public Object evalPromise(RPromise promise) throws RError { + // have to do the full out eval + try { + return eval(lookupBuiltin("eval"), (RNode) promise.getRep(), promise.getEnv(), null); + } catch (PutException ex) { + // TODO a new, rather unlikely, error + assert false; + return null; + } } private static Object parseAndEvalImpl(ANTLRStringStream stream, Source source, VirtualFrame frame, REnvironment envForFrame, boolean printResult) { diff --git a/com.oracle.truffle.r.native/lib/darwin/libRDerived.dylib b/com.oracle.truffle.r.native/lib/darwin/libRDerived.dylib index 8d58a619d4c489fe40556023a711d7e24dc88d08..7357b08e5493dfd3624a3345209e9f84f6d9a3a4 100755 GIT binary patch literal 21008 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 Q9F5=z1V<f4e1qKu055q+W&i*H literal 25064 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 YDM$ho>>zFN;GhRb6F7n}qLP6D02YudsQ>@~ diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java index 1ebdab8606..1878e1c16f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/EvalFunctions.java @@ -97,6 +97,8 @@ public class EvalFunctions { @RBuiltin(name = "eval", nonEvalArgs = {0}, kind = SUBSTITUTE) public abstract static class Eval extends EvalAdapter { + public abstract Object execute(VirtualFrame frame, RPromise expr, REnvironment envir, RMissing enclos); + @Specialization public Object doEval(VirtualFrame frame, RPromise expr, @SuppressWarnings("unused") RMissing envir, RMissing enclos) { return doEval(frame, expr, REnvironment.globalEnv(), enclos); @@ -114,7 +116,7 @@ public class EvalFunctions { * caller, so we can evaluate the promise using frame. */ controlVisibility(); - Object exprVal = RContext.getEngine().evalPromise(expr, frame); + Object exprVal = expr.getValue(frame); return doEvalBody(exprVal, envir, enclos); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java index 6a6fcdc898..0cf58769a4 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java @@ -45,7 +45,7 @@ public final class PromiseNode extends RNode { */ @Override public Object execute(VirtualFrame frame) { - return new RPromise(languageRep.getRep()); + return RDataFactory.createPromise(languageRep.getRep()); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java index 395daa1647..01a62746c5 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java @@ -168,11 +168,17 @@ public final class RContext extends ExecutionContext { Object eval(RFunction function, RLanguage expr, REnvironment envir, REnvironment enclos) throws PutException; /** - * Evaluate a promise in the given frame (for a builtin, where we can use the - * {@link VirtualFrame}) of the caller directly). + * Evaluate a promise in the given frame, where we can use the {@link VirtualFrame}) of the + * caller directly). This should <b>only</b> be called by the {@link RPromise} class. */ Object evalPromise(RPromise expr, VirtualFrame frame) throws RError; + /** + * Evaluate a promise in the {@link MaterializedFrame} stored with the promise. This should + * <b>only</b> be called by the {@link RPromise} class. + */ + Object evalPromise(RPromise expr) throws RError; + } private final HashMap<Object, RFunction> cachedFunctions = new HashMap<>(); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java index cd9a544d38..e3da591a9e 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java @@ -317,11 +317,19 @@ public final class RDataFactory { } public static RSymbol createSymbol(String name) { - return new RSymbol(name); + return traceDataCreated(new RSymbol(name)); } public static RLanguage createLanguage(Object rep) { - return new RLanguage(rep); + return traceDataCreated(new RLanguage(rep)); + } + + public static RPromise createPromise(Object rep, REnvironment env) { + return traceDataCreated(new RPromise(rep, env)); + } + + public static RPromise createPromise(Object rep) { + return createPromise(rep, null); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPromise.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPromise.java index b1244a0a25..3fb095a023 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPromise.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPromise.java @@ -22,43 +22,73 @@ */ package com.oracle.truffle.r.runtime.data; +import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.r.runtime.*; + /** * Denotes an R {@code promise}. It extends {@link RLanguageRep} with a (lazily) evaluated value. */ @com.oracle.truffle.api.CompilerDirectives.ValueType public class RPromise extends RLanguageRep { /** - * Denotes a promise that raised an error during evaluation. + * For promises associated with environments (frames) that are not top-level. + */ + private REnvironment env; + /** + * When {@code null} the promise has not been evaluated. */ - private static Object ERROR = new Object(); - private Object value; /** - * Create the promise with a representation that allow evaluation later. + * Create the promise with a representation that allows evaluation later in the "current" frame. + * The frame may need to be set if the promise is passed as an argument to another function. */ - public RPromise(Object rep) { + RPromise(Object rep) { + this(rep, null); + } + + /** + * Create the promise with a representation that allows evaluation later in a given frame. + */ + RPromise(Object rep, REnvironment env) { super(rep); + this.env = env; + } + + public REnvironment getEnv() { + return env; } /** - * This is a workaround for the fact that REngine can't be called from here (at the moment), - * otherwise the evaluation would be implicitly done in {@link #getValue}. + * Get the value of the promise, evaluating it if necessary in the associated environment. A + * promise is evaluate-once. */ - public Object setValue(Object newValue) { + public Object getValue() { if (value == null) { - if (newValue == null) { - this.value = ERROR; - } else { - this.value = newValue; + assert env != null; + try { + value = RContext.getEngine().evalPromise(this); + } catch (RError e) { + value = e; + throw e; } - } else { - assert false : "promise already has a value"; } - return this.value; + return value; } - public Object getValue() { + /** + * Get the value of the promise, evaluating it if necessary in the given {@link VirtualFrame}. A + * promise is evaluate-once. + */ + public Object getValue(VirtualFrame frame) { + if (value == null) { + try { + value = RContext.getEngine().evalPromise(this, frame); + } catch (RError e) { + value = e; + throw e; + } + } return value; } -- GitLab