From ec935d559ef9dc3993bd8c08ebec1d9467c3bcfa Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Tue, 4 Apr 2017 18:55:05 +0200 Subject: [PATCH] Fix: Invalid argument matching for cbind2. --- .../com/oracle/truffle/r/nodes/builtin/base/Bind.java | 7 ++++++- .../com/oracle/truffle/r/test/ExpectedTestOutput.test | 11 +++++++++++ .../truffle/r/test/builtins/TestBuiltin_cbind.java | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java index 4f6dba39bc..acc4e16ed1 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bind.java @@ -585,7 +585,12 @@ public abstract class Bind extends RBaseNode { CompilerDirectives.transferToInterpreterAndInvalidate(); bind = insert(BindNodeGen.create(type)); } - return bind.execute(frame, deparseLevel, args.getArguments(), (RArgsValuesAndNames) RArguments.getArgument(frame, 0), precedence(args.getArguments())); + Object firstArg = RArguments.getArgument(frame, 0); + RArgsValuesAndNames promisedArgs = args; + if (firstArg instanceof RArgsValuesAndNames) { + promisedArgs = (RArgsValuesAndNames) firstArg; + } + return bind.execute(frame, deparseLevel, args.getArguments(), promisedArgs, precedence(args.getArguments())); } } 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 322f7f2982..4a91d4b30c 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 @@ -13334,6 +13334,17 @@ structure(integer(0), .Dim = c(0L, 3L), .Dimnames = list(NULL, 5th break 1201 1466 6th break 1467 1600 +##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testcbind6# +#cbind2(3, 4) + [,1] [,2] +[1,] 3 4 + +##com.oracle.truffle.r.test.builtins.TestBuiltin_cbind.testcbind6# +#cbind2(matrix(1:10, 2, 2), matrix(11:20, 2, 2)) + [,1] [,2] [,3] [,4] +[1,] 1 3 11 13 +[2,] 2 4 12 14 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_ceiling.testCeiling# #{ ceiling(c(0.2,-3.4,NA,0/0,1/0)) } [1] 1 -3 NA NaN Inf diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java index cccb74db2a..d675297dfd 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_cbind.java @@ -49,6 +49,12 @@ public class TestBuiltin_cbind extends TestBase { "do.call('cbind', argv)"); } + @Test + public void testcbind6() { + assertEval("cbind2(3, 4)"); + assertEval("cbind2(matrix(1:10, 2, 2), matrix(11:20, 2, 2))"); + } + @Test public void testCbind() { assertEval("{ cbind() }"); -- GitLab