From b553569f9da89edb8f31184f3826249f5bfbe49e Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Thu, 12 May 2016 10:03:42 +0200 Subject: [PATCH] special case in RMissingHelper for eager promises --- .../truffle/r/nodes/function/RMissingHelper.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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 8eabdccc3c..12483dc1a6 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); -- GitLab