diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java index 51bf9095613afaf8efa757bfabfa5ba2fc87b64b..dff9b6e0bb8da65744281da0c509d8ed8eddb473 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java @@ -38,6 +38,7 @@ import com.oracle.truffle.r.runtime.RError.Message; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.builtins.RBuiltin; +import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RPromise; import com.oracle.truffle.r.runtime.env.REnvironment; @@ -68,14 +69,14 @@ public abstract class Exists extends RBuiltinNode.Arg4 { if (modeType != RType.Any && obj instanceof RPromise) { obj = PromiseHelperNode.evaluateSlowPath((RPromise) obj); } - return RRuntime.asLogical(obj != null && RRuntime.checkType(obj, modeType)); + return RRuntime.asLogical(obj != null && obj != RMissing.instance && RRuntime.checkType(obj, modeType)); } for (REnvironment e = env; e != REnvironment.emptyEnv(); e = e.getParent()) { Object obj = e.get(name); if (modeType != RType.Any && obj instanceof RPromise) { obj = PromiseHelperNode.evaluateSlowPath((RPromise) obj); } - if (obj != null && RRuntime.checkType(obj, modeType)) { + if (obj != null && obj != RMissing.instance && RRuntime.checkType(obj, modeType)) { return RRuntime.LOGICAL_TRUE; } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index f0f5839ca9004a20c4b3a1cb6778e9c63f1fed72..ce3677460a4ae68fa76b3f045902b8ec8bec89e0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -153818,6 +153818,10 @@ $variables list(k, y, z) +##com.oracle.truffle.r.test.library.stats.TestRandGenerationFunctions.testDotRandomSeed# +#exists('.Random.seed', envir = .GlobalEnv, inherits = FALSE) +[1] FALSE + ##com.oracle.truffle.r.test.library.stats.TestRandGenerationFunctions.testDotRandomSeed#Output.IgnoreErrorContext# #{ .Random.seed } Error: object '.Random.seed' not found diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestRandGenerationFunctions.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestRandGenerationFunctions.java index 7eb611414dea78ba41359db1af0bdc19ee07aec0..79fe868db28a0542966638e38d8b736348fe79ea 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestRandGenerationFunctions.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestRandGenerationFunctions.java @@ -110,5 +110,7 @@ public class TestRandGenerationFunctions extends TestBase { assertEval("{ get0('.Random.seed', envir = .GlobalEnv, inherits = FALSE) }"); assertEval(Output.IgnoreErrorContext, "{ get('.Random.seed', envir = .GlobalEnv, inherits = TRUE) }"); assertEval("{ get0('.Random.seed', envir = .GlobalEnv, inherits = TRUE) }"); + + assertEval("exists('.Random.seed', envir = .GlobalEnv, inherits = FALSE)"); } }