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