diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RMissingHelper.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RMissingHelper.java index 8eabdccc3ccbffe3010be2b0e08209fac31793c5..12483dc1a616ec10ca9a3bd043de8026d72b7c9f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RMissingHelper.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RMissingHelper.java @@ -151,9 +151,19 @@ public class RMissingHelper { } try { - // TODO Profile necessary here??? + if (promise.isEvaluated()) { + return false; + } if (promise instanceof EagerPromise) { - ((EagerPromise) promise).materialize(); + EagerPromise eagerPromise = (EagerPromise) promise; + if (!eagerPromise.isDeoptimized()) { + Object eagerValue = eagerPromise.getEagerValue(); + if (eagerValue instanceof RPromise) { + return isMissingName((RPromise) eagerValue); + } else { + return isMissing(eagerValue); + } + } } // promise.materialize(globalMissingPromiseProfile); promise.setUnderEvaluation(true);