From c1cb9b2e11ac96599a2ff425748f0b69883b5ef6 Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Thu, 12 Oct 2017 13:46:58 +0200
Subject: [PATCH] Fix: Did not create proper language object for 'empty' syntax
 element.

---
 .../com/oracle/truffle/r/nodes/RASTUtils.java |  2 +-
 .../truffle/r/test/ExpectedTestOutput.test    | 19 +++++++++++++++++++
 .../r/test/builtins/TestBuiltin_iscall.java   |  1 +
 .../r/test/builtins/TestBuiltin_print.java    |  1 +
 4 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
index 5d556ba0bb..9da8ce6869 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
@@ -133,7 +133,7 @@ public final class RASTUtils {
         assert element != null;
         if (element instanceof RSyntaxConstant) {
             Object value = ((RSyntaxConstant) element).getValue();
-            if (value == RMissing.instance) {
+            if (value == RMissing.instance || value == REmpty.instance) {
                 // special case which GnuR handles as an unnamed symbol
                 return RSymbol.MISSING;
             }
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 06d54805ff..51ba1df384 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
@@ -29806,6 +29806,21 @@ character(0)
 #argv <- list(structure(c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE), .Names = c('1', '2', '3', '4', '5', '6', '7', '8')));is.atomic(argv[[1]]);
 [1] TRUE
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_iscall.testIsCall#
+#{ callExpr <- quote(asd[,1]); lapply(callExpr, function(x) is.call(x)) }
+[[1]]
+[1] FALSE
+
+[[2]]
+[1] FALSE
+
+[[3]]
+[1] FALSE
+
+[[4]]
+[1] FALSE
+
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_iscall.testIsCall#
 #{ cl <- call("f") ; is.call(cl) }
 [1] TRUE
@@ -46612,6 +46627,10 @@ Error in .primUntrace(42) : argument must be a function
 #{  x<-c(11, 7, 2222, 7, 33); print(x,quote=TRUE) }
 [1]   11    7 2222    7   33
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_print.testPrint#
+#{ callExpr <- quote(a[,2]); res <- lapply(callExpr, function(x) x); print(res[[3]]) }
+
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_print.testPrint#
 #{ n <- 17 ; fac <- factor(rep(1:3, length = n), levels = 1:5) ; y<-tapply(1:n, fac, sum); y }
  1  2  3  4  5
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iscall.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iscall.java
index 3284783f60..f240e1d164 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iscall.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_iscall.java
@@ -148,5 +148,6 @@ public class TestBuiltin_iscall extends TestBase {
         assertEval("{ cl <- call(\"f\", 2, 3) ; is.call(cl) }");
         assertEval("{ cl <- list(f, 2, 3) ; is.call(cl) }");
         assertEval("{ is.call(call) }");
+        assertEval("{ callExpr <- quote(asd[,1]); lapply(callExpr, function(x) is.call(x)) }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_print.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_print.java
index 4cbcb19b59..082ed5dee1 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_print.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_print.java
@@ -72,5 +72,6 @@ public class TestBuiltin_print extends TestBase {
         assertEval("{ nql <- noquote(letters); nql}");
         assertEval("{ x <- 42; attr(x,'myattr') <- list(k=3); attributes(x) }");
         assertEval("{ val <- 42L; attr(val, 'contrast') <- list(k=1); qr <- list(qr=val); qr }");
+        assertEval("{ callExpr <- quote(a[,2]); res <- lapply(callExpr, function(x) x); print(res[[3]]) }");
     }
 }
-- 
GitLab