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