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