diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java index 3883d7ba9515f1b3213b6294cd5e5b8468ae1f18..1fe793922b1980cd44b23a674a89c2296e4ec96f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java @@ -69,6 +69,7 @@ import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.VirtualEvalFrame; import com.oracle.truffle.r.runtime.builtins.RBuiltin; +import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.data.RAttributable; import com.oracle.truffle.r.runtime.data.RAttributesLayout; import com.oracle.truffle.r.runtime.data.RDataFactory; @@ -88,6 +89,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.env.REnvironment; +import com.oracle.truffle.r.runtime.env.REnvironment.ContextStateImpl; import com.oracle.truffle.r.runtime.env.frame.ActiveBinding; import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor; @@ -484,7 +486,20 @@ public class EnvFunctions { } @Specialization + @TruffleBoundary protected String environmentName(REnvironment env) { + ContextStateImpl state = RContext.getInstance().stateREnvironment; + if (env == state.getGlobalEnv()) { + return "R_GlobalEnv"; + } else if (env == state.getBaseEnv()) { + return "base"; + } else if (env == REnvironment.emptyEnv()) { + return "R_EmptyEnv"; + } else if (env.isPackageEnv() != null) { + return env.isPackageEnv(); + } else if (env.isNamespaceEnv()) { + return env.getNamespaceSpec().getDataAt(0); + } return env.getName(); }