From 7ebab0f72f6983fae0456b7a7555603abf8bb238 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Wed, 13 Dec 2017 14:06:54 +0100 Subject: [PATCH] Fix: rep ignores non-existing varargs --- .../src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java | 4 +++- .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 5 +++++ .../com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java index 83f22bc1cd..2f2187d7e1 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java @@ -115,7 +115,9 @@ public abstract class Repeat extends RBuiltinNode.Arg2 { RError.Message.FIRST_ELEMENT_USED, "each").findFirst(1, RError.Message.FIRST_ELEMENT_USED, "each").replaceNA(1).mustBe(gte(0)); - ArgumentsSignature signature = ArgumentsSignature.get("times", "length.out", "each"); + // "..." in signature ensures that the matcher will not report additional arguments which + // are also ignored by GNUR + ArgumentsSignature signature = ArgumentsSignature.get("times", "length.out", "each", "..."); ARG_IDX_TIMES = 0; ARG_IDX_LENGHT_OUT = 1; ARG_IDX_EACH = 2; 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 e523da3a81..7ef462cd65 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 @@ -51308,6 +51308,11 @@ attr(,"useBytes") #argv <- structure(list(x = c('A', 'B', 'C'), m = structure(c(1L, -1L, 1L), match.length = c(1L, -1L, 1L), useBytes = TRUE), value = c('A', 'C')), .Names = c('x', 'm', 'value'));do.call('regmatches<-', argv) [1] "A" "B" "C" +##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testRep# +#rep(' ', 20L, collapse = ' ') + [1] " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " +[20] " " + ##com.oracle.truffle.r.test.builtins.TestBuiltin_rep.testRep# #rep(x<-42) [1] 42 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java index 0d31bcabae..01f86871e8 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_rep.java @@ -239,5 +239,7 @@ public class TestBuiltin_rep extends TestBase { assertEval("{ rep(paste0('hello', 1:10), 10) }"); assertEval("{ rep(paste0('hello', 1:10), 1:10) }"); + + assertEval("rep(' ', 20L, collapse = ' ')"); } } -- GitLab