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 87225b56dc2535805b35f51ed13a93aa69105fbb..cd6d41817b4d91f61a22c6ba51876a49930b52da 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 @@ -141,7 +141,11 @@ public abstract class RfEvalNode extends FFIUpCallNode.Arg2 { if (envIsNullProfile.profile(envArg == RNull.instance)) { return REnvironment.globalEnv(RContext.getInstance()); } else if (envArg instanceof REnvironment) { - return (REnvironment) envArg; + REnvironment env = (REnvironment) envArg; + if (env == REnvironment.emptyEnv()) { + return RContext.getInstance().stateREnvironment.getEmptyDummy(); + } + return env; } CompilerDirectives.transferToInterpreter(); throw RError.error(RError.NO_CALLER, ARGUMENT_NOT_ENVIRONMENT); 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 1253a0a8091e54e81e3e8f2c06ff270a0cab5b43..190728124225092bfda16e1990049e4a3ca6a66a 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 @@ -124,8 +124,12 @@ public abstract class REnvironment extends RAttributeStorage { @CompilationFinal private SearchPath searchPath; @CompilationFinal private MaterializedFrame parentGlobalFrame; // SHARED_PARENT_RW only + @CompilationFinal private REnvironment emptyDummy; // used when evaluating in emptyenv + private ContextStateImpl(MaterializedFrame globalFrame) { this.globalFrame = globalFrame; + this.emptyDummy = RDataFactory.createNewEnv(null, false, 0); + RArguments.initializeEnclosingFrame(this.emptyDummy.getFrame(), null); } public REnvironment getGlobalEnv() { @@ -144,6 +148,10 @@ public abstract class REnvironment extends RAttributeStorage { return baseEnv; } + public REnvironment getEmptyDummy() { + return emptyDummy; + } + public REnvironment getBaseNamespace() { return baseEnv.getNamespace(); }