From 7baa94643d996188a75309af7ff0fc587c64cfd5 Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Fri, 13 Oct 2017 10:27:46 +0200
Subject: [PATCH] Allow missing parameter for 'is.call' and revert changes in
 RASTUtils.

---
 .../r/nodes/builtin/base/IsTypeFunctions.java        |  4 ++--
 .../src/com/oracle/truffle/r/nodes/RASTUtils.java    |  2 +-
 .../oracle/truffle/r/test/ExpectedTestOutput.test    | 12 ++++++++----
 .../truffle/r/test/builtins/TestBuiltin_print.java   |  1 -
 .../truffle/r/test/builtins/TestBuiltin_quote.java   |  3 +++
 5 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
index ee53ad4ccb..1c8e9a467c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTypeFunctions.java
@@ -181,7 +181,7 @@ public class IsTypeFunctions {
     public abstract static class IsCall extends MissingAdapter {
 
         static {
-            createCasts(IsCall.class);
+            Casts.noCasts(IsCall.class);
         }
 
         @Specialization
@@ -189,7 +189,7 @@ public class IsTypeFunctions {
             return RRuntime.LOGICAL_TRUE;
         }
 
-        @Specialization(guards = {"!isRMissing(value)", "!isRLanguage(value)"})
+        @Specialization(guards = {"!isRLanguage(value)"})
         protected byte isType(@SuppressWarnings("unused") Object value) {
             return RRuntime.LOGICAL_FALSE;
         }
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 9da8ce6869..5d556ba0bb 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 || value == REmpty.instance) {
+            if (value == RMissing.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 51ba1df384..2a5c05f9d5 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
@@ -46627,10 +46627,6 @@ 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
@@ -47889,6 +47885,10 @@ Error in quote() : 0 arguments passed to 'quote' which requires 1
 #quote(expr=)
 
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_quote.testQuote#Ignored.ImplementationError#
+#typeof(quote(a[,2])[[3]])
+[1] "symbol"
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_quote.testQuote#
 #{ class(quote(x + y)) }
 [1] "call"
@@ -47935,6 +47935,10 @@ list(1, 2)
 #{ quote(x <- x + 1) }
 x <- x + 1
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_quote.testQuote#Ignored.ImplementationError#
+#{ res <- quote(a[,2])[[3]]; typeof(res) }
+Error in typeof(res) : argument "res" is missing, with no default
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_quote.testQuote#
 #{ typeof(quote(1)) }
 [1] "double"
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 082ed5dee1..4cbcb19b59 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,6 +72,5 @@ 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]]) }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quote.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quote.java
index 2eeee80799..014088dfd5 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quote.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quote.java
@@ -45,5 +45,8 @@ public class TestBuiltin_quote extends TestBase {
         // in GNUR, these behave inconsistently:
         assertEval(Ignored.ImplementationError, "quote()");
         assertEval("quote(expr=)");
+
+        assertEval(Ignored.ImplementationError, "typeof(quote(a[,2])[[3]])");
+        assertEval(Ignored.ImplementationError, "{ res <- quote(a[,2])[[3]]; typeof(res) }");
     }
 }
-- 
GitLab