diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java index ac41e8e5355ab9c72624c983bcef21c60928aa89..a3aa04791edfcdee8f32877b9552a29d4a481f69 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java @@ -178,6 +178,12 @@ public abstract class Order extends RPrecedenceBuiltinNode { return RNull.instance; } + @SuppressWarnings("unused") + @Specialization(guards = {"oneVec(args)", "isNull(args)"}) + Object orderNull(byte naLast, boolean decreasing, RArgsValuesAndNames args) { + throw error(RError.Message.NOT_A_VECTOR, 1); + } + @Specialization(guards = {"oneVec(args)", "isFirstIntegerPrecedence(args)"}) Object orderInt(byte naLast, boolean decreasing, RArgsValuesAndNames args) { RAbstractIntVector v = (RAbstractIntVector) castVector(args.getArgument(0)); @@ -694,6 +700,10 @@ public abstract class Order extends RPrecedenceBuiltinNode { return isListPrecedence(args.getArgument(0)); } + protected boolean isNull(RArgsValuesAndNames args) { + return args.getArgument(0) == RNull.instance; + } + protected boolean noVec(RArgsValuesAndNames args) { return args.isEmpty(); } 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 73654eed63e7660ab4b8024aa9a289a89d8863fe..ea87c1d8a9dd1e748c740c7f03404657d9b8f092 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 @@ -46123,6 +46123,10 @@ Error in options(list(NULL)) : list argument has no valid names 'data.frame': 3 obs. of 1 variable: $ a: Factor w/ 3 levels "A wo","Far ",..: 1 2 3 +##com.oracle.truffle.r.test.builtins.TestBuiltin_order.testOrder# +#order(NULL) +Error in order(NULL) : argument 1 is not a vector + ##com.oracle.truffle.r.test.builtins.TestBuiltin_order.testOrder# #order(c('40 50', '405', '40 51', '4028', '40 20', '40 30', '404')) [1] 5 6 1 3 4 7 2 @@ -46132,6 +46136,10 @@ Error in options(list(NULL)) : list argument has no valid names Error in order(c(1, 2, 0), decreasing = NA) : 'decreasing' elements must be TRUE or FALSE +##com.oracle.truffle.r.test.builtins.TestBuiltin_order.testOrder# +#order(c(NULL, c(1,2,0))) +[1] 3 1 2 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_order.testOrder# #{ order() } NULL diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_order.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_order.java index 5763cc90d503db4d178973cc9159ce6ebe5f1fa8..a6b41ccc504ddedddbf01d6b16fc120b9344be5f 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_order.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_order.java @@ -166,5 +166,8 @@ public class TestBuiltin_order extends TestBase { assertEval("order(c(1,2,0), decreasing=NA)"); assertEval("invisible(Sys.setlocale('LC_COLLATE', 'EN_us')); str(as.data.frame(list(a=c('A wo','Far ','abc ')))); invisible(Sys.setlocale('LC_COLLATE', 'C')); str(as.data.frame(list(a=c('A wo','Far ','abc '))));"); + + assertEval("order(NULL)"); + assertEval("order(c(NULL, c(1,2,0)))"); } }