From d42a25bdd27b37f5d7e0bea8ccdff8bfdcd9a82d Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 9 Feb 2018 15:40:32 +0100 Subject: [PATCH] connect RCaller hierarchy in RfEvalNode --- .../truffle/r/ffi/impl/nodes/RfEvalNode.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java index cd6d41817b..b19c7953b6 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/RfEvalNode.java @@ -31,13 +31,16 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.api.profiles.ValueProfile; import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode; import com.oracle.truffle.r.nodes.function.PromiseHelperNode; import com.oracle.truffle.r.runtime.ArgumentsSignature; +import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.RCaller; import com.oracle.truffle.r.runtime.RError; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.data.RExpression; import com.oracle.truffle.r.runtime.data.RFunction; @@ -57,28 +60,33 @@ public abstract class RfEvalNode extends FFIUpCallNode.Arg2 { return RfEvalNodeGen.create(); } + private static RCaller createCall() { + Frame frame = Utils.getActualCurrentFrame(); + return RArguments.getCall(frame); + } + @Specialization @TruffleBoundary Object handlePromise(RPromise expr, @SuppressWarnings("unused") RNull nulLEnv) { - return getPromiseHelper().evaluate(null, expr); + return getPromiseHelper().evaluate(Utils.getActualCurrentFrame().materialize(), expr); } @Specialization @TruffleBoundary Object handlePromise(RPromise expr, @SuppressWarnings("unused") REnvironment env) { - return getPromiseHelper().evaluate(null, expr); + return getPromiseHelper().evaluate(Utils.getActualCurrentFrame().materialize(), expr); } @Specialization @TruffleBoundary Object handleExpression(RExpression expr, Object envArg) { - return RContext.getEngine().eval(expr, getEnv(envArg), null); + return RContext.getEngine().eval(expr, getEnv(envArg), createCall()); } @Specialization(guards = "expr.isLanguage()") @TruffleBoundary Object handleLanguage(RPairList expr, Object envArg) { - return RContext.getEngine().eval(expr, getEnv(envArg), null); + return RContext.getEngine().eval(expr, getEnv(envArg), createCall()); } @Specialization @@ -124,7 +132,7 @@ public abstract class RfEvalNode extends FFIUpCallNode.Arg2 { @TruffleBoundary private static Object evalFunction(RFunction f, REnvironment env, ArgumentsSignature argsNames, Object... args) { - return RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : env.getFrame(), RCaller.topLevel, true, argsNames, args); + return RContext.getEngine().evalFunction(f, env == REnvironment.globalEnv() ? null : env.getFrame(), createCall(), true, argsNames, args); } @Fallback -- GitLab