From ab4412213190b83fe6d9586f3578878120180d6b Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 9 Feb 2018 15:05:40 +0100 Subject: [PATCH] frameToEnvironment doesn't need TruffleBoundary --- .../truffle/r/nodes/builtin/base/Xtfrm.java | 2 +- .../r/nodes/builtin/EnvironmentNodes.java | 2 +- .../truffle/r/runtime/env/REnvironment.java | 31 ++----------------- 3 files changed, 4 insertions(+), 31 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java index a6f492fda3..9f9e6abd16 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Xtfrm.java @@ -64,7 +64,7 @@ public abstract class Xtfrm extends RBuiltinNode.Arg1 { REnvironment env = RArguments.getEnvironment(frame); if (createProfile.profile(env == null)) { - env = REnvironment.createEnclosingEnvironments(frame.materialize()); + env = REnvironment.frameToEnvironment(frame.materialize()); } RFunction func = (RFunction) getNode.execute(frame, "xtfrm.default", env, RType.Function.getName(), true); return RContext.getEngine().evalFunction(func, null, null, true, null, x); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/EnvironmentNodes.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/EnvironmentNodes.java index 5d6db966d1..ef47ee3c24 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/EnvironmentNodes.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/EnvironmentNodes.java @@ -146,7 +146,7 @@ public final class EnvironmentNodes { } REnvironment env = RArguments.getEnvironment(enclosing); if (createProfile.profile(env == null)) { - return REnvironment.createEnclosingEnvironments(enclosing.materialize()); + return REnvironment.frameToEnvironment(enclosing.materialize()); } return env; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java index ecfce5c159..95ba65c09f 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/REnvironment.java @@ -660,27 +660,8 @@ public abstract class REnvironment extends RAttributeStorage { MaterializedFrame f = frame instanceof VirtualEvalFrame ? ((VirtualEvalFrame) frame).getOriginalFrame() : frame; REnvironment env = RArguments.getEnvironment(f); if (env == null) { - if (RArguments.getFunction(f) == null) { - throw RInternalError.shouldNotReachHere(); - } - env = createEnclosingEnvironments(f); - } - return env; - } - - /** - * This chain can be followed back to whichever "base" (i.e. non-function) environment the - * outermost function was defined in, e.g. "global" or "base". The purpose of this method is to - * create an analogous lexical parent chain of {@link Function} instances with the correct - * {@link MaterializedFrame}. - */ - @TruffleBoundary - public static REnvironment createEnclosingEnvironments(MaterializedFrame frame) { - MaterializedFrame f = frame instanceof VirtualEvalFrame ? ((VirtualEvalFrame) frame).getOriginalFrame() : frame; - REnvironment env = RArguments.getEnvironment(f); - if (env == null) { - // parent is the env of the enclosing frame - env = REnvironment.Function.create(f); + assert RArguments.getFunction(f) != null; + RArguments.setEnvironment(f, env = new REnvironment.Function(f)); } return env; } @@ -1068,14 +1049,6 @@ public abstract class REnvironment extends RAttributeStorage { // function environments are not named super(UNNAMED, frame); } - - private static Function create(MaterializedFrame frame) { - Function result = (Function) RArguments.getEnvironment(frame); - if (result == null) { - result = new Function(frame); - } - return result; - } } /** -- GitLab