diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubsetNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubsetNode.java index 22dfb909a4f8576bbf724decdf46e4953142c213..f45d9018a6394c39ec670548a3d687d52059680a 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubsetNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubsetNode.java @@ -144,7 +144,6 @@ abstract class PositionCheckSubsetNode extends PositionCheckNode { @Cached("create()") GetNamesAttributeNode getNamesNode, @Cached("create()") SetNamesAttributeNode setNamesNode) { RAbstractIntVector intPosition = RDataFactory.createIntVector(positionLength); - intPosition.setComplete(position.isComplete()); // requires names preservation RStringVector names = hasNamesProfile.profile(getNamesNode.getNames(position)); if (names != null) { @@ -204,6 +203,7 @@ abstract class PositionCheckSubsetNode extends PositionCheckNode { } intPosition.setDataAt(convertedStore, i, intPositionValue); } + intPosition.setComplete(!hasSeenNA); return doIntegerProfiled(profile, dimensionLength, intPosition, positionLength, hasSeenPositive, hasSeenNegative, hasSeenNA, outOfBoundsCount, zeroCount, maxOutOfBoundsIndex); } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java index 3fe65ddf1deb8f692a94b0c30732552f70fe2130..a2b582ecce0c4447e1759ddca2909f042585d8d0 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java @@ -642,7 +642,7 @@ public class RDeparse { } } else if (value instanceof RPairList) { RPairList arglist = (RPairList) value; - assert arglist.getType() == SEXPTYPE.LISTSXP; + assert arglist.getType() == null || arglist.getType() == SEXPTYPE.LISTSXP : arglist.getType(); append("pairlist("); int i = 0; boolean lbreak = false; diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLists.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLists.java index 88b2cbf42e33bf2f053d126c0f8bc45234a7df23..f9391d284b4f51face32cb1f3bfc3c960199a5a8 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLists.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleLists.java @@ -48,10 +48,14 @@ public class TestSimpleLists extends TestBase { assertEval(Output.IgnoreErrorContext, "{ l <- list(1,2,3) ; l[[0]] }"); assertEval("{ l <- list(1,2,3) ; l[[NA]] }"); + assertEval("{ l <- list(1,2,3) ; l[[NaN]] }"); assertEval("{ l <- list(1,2,3) ; typeof(l[[NA]]) }"); + assertEval("{ l <- list(1,2,3) ; typeof(l[[NaN]]) }"); assertEval("{ l <- list(1,2,3) ; l[NA] }"); + assertEval("{ l <- list(1,2,3) ; l[NaN] }"); assertEval("{ l <- list(1,2,3) ; typeof(l[NA]) }"); + assertEval("{ l <- list(1,2,3) ; typeof(l[NaN]) }"); assertEval("{ l <- list(1,2,3) ; l[-2] }"); assertEval("{ l <- list(1,2,3) ; typeof(l[-2]) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleMatrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleMatrix.java index 3ce0c94e121bdec3c9513f145bb29bd30e779cda..2324ef9e6a20866630ffb26c887719c95db85774 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleMatrix.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleMatrix.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,8 +82,11 @@ public class TestSimpleMatrix extends TestBase { assertEval(template("{ x<-%0; dim(x)<-c(1,4); dimnames(x)<-list(\"z\", c(\"a\", \"b\", \"c\", \"d\")); x[1, c(1,3)] }", TESTED_4L_VECTORS)); assertEval(template("{ x<-%0; dim(x)<-c(1,4); dimnames(x)<-list(\"z\", c(\"a\", \"b\", \"d\", \"e\")); x[1, c(1,3)] }", TESTED_4L_VECTORS)); assertEval(template("{ x<-%0; dim(x)<-c(2,2); x[c(1, NA), ] }", TESTED_4L_VECTORS)); + assertEval(template("{ x<-%0; dim(x)<-c(2,2); x[c(1, NaN), ] }", TESTED_4L_VECTORS)); assertEval(template("{ x<-%0; dim(x)<-c(2,2); x[c(TRUE, NA), ] }", TESTED_4L_VECTORS)); + assertEval(template("{ x<-%0; dim(x)<-c(2,2); x[c(TRUE, NaN), ] }", TESTED_4L_VECTORS)); assertEval(template("{ x<-%0; x<-1:4; dim(x)<-c(2,2); x[NA, ] }", TESTED_4L_VECTORS)); + assertEval(template("{ x<-%0; x<-1:4; dim(x)<-c(2,2); x[NaN, ] }", TESTED_4L_VECTORS)); // A misalignment error similar to those in TestSimpleVector (testIgnored1-3) WhiteList wl = WhiteList.create("matrix formatting1"); wl.add("{ x<-c(as.raw(1),as.raw(2),as.raw(3),as.raw(4)); dim(x)<-c(2,2); dimnames(x)<-list(c(\"a\", \"b\"), c(\"c\", \"d\")); x[c(1,NA), 1] }", diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java index 21158c964e25b24f15b83c8c185cbddb80eb1040..60ee20a4efe1edc0bf42bcdaa0f7de9c424638ed 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java @@ -162,6 +162,7 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-3:1; x[1L] }"); assertEval("{ x<-3:1; x[2L] }"); assertEval("{ x<-3:1; x[3L] }"); + assertEval("{ x<-3:1; x[NA_integer_] }"); } @Test @@ -192,6 +193,8 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-3:1; x[1.1] }"); assertEval("{ x<-3:1; x[2.1] }"); assertEval("{ x<-3:1; x[3.1] }"); + assertEval("{ x<-3:1; x[NaN] }"); + assertEval("{ x<-3:1; x[NA_real_] }"); } @Test @@ -225,6 +228,7 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-NULL; x[1L] }"); assertEval("{ x<-NULL; x[2L] }"); assertEval("{ x<-NULL; x[3L] }"); + assertEval("{ x<-NULL; x[NaN] }"); assertEval("{ x<-1.1:3.1; x[1L] }"); assertEval("{ x<-1.1:3.1; x[2L] }"); assertEval("{ x<-1.1:3.1; x[3L] }"); @@ -242,7 +246,10 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-1L; x[-2L] }"); assertEval("{ x<-1L; x[TRUE] }"); assertEval("{ x<-1L; x[FALSE] }"); + assertEval("{ x<-1L; x[NA_real_] }"); + assertEval("{ x<-1L; x[NA_integer_] }"); assertEval("{ x<-1L; x[NA] }"); + assertEval("{ x<-1L; x[NaN] }"); } @Test @@ -262,6 +269,7 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-1; x[TRUE] }"); assertEval("{ x<-1; x[FALSE] }"); assertEval("{ x<-1; x[NA] }"); + assertEval("{ x<-1; x[NaN] }"); } @Test @@ -399,6 +407,10 @@ public class TestSimpleVectors extends TestBase { assertEval(Output.IgnoreErrorContext, "{ x<-7; x[[0]]<-42; x }"); assertEval("{ x<-1:4; x[c(1, 0)]<-42; x }"); assertEval("{ x<-1:4; x[c(0, 1)]<-42; x }"); + assertEval("{ x<-1:4; x[c(1, NA)]<-42; x }"); + assertEval("{ x<-1:4; x[c(1, NaN)]<-42; x }"); + assertEval("{ x<-1:4; x[c(NA, 1)]<-42; x }"); + assertEval("{ x<-1:4; x[c(NaN, 1)]<-42; x }"); assertEval("{ x<-1:4; x[c(1, 0)]<-c(7, 42); x }"); assertEval("{ x<-1:4; x[c(0, 1)]<-c(7, 42); x }"); assertEval("{ x<-1:4; dim(x)<-c(2,2); x[NULL]<-42; x }"); @@ -407,7 +419,9 @@ public class TestSimpleVectors extends TestBase { assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(1,4)]<-c(42, 43); x }"); assertEval(Output.IgnoreErrorContext, "{ x<-1:4; dim(x)<-c(2,2); x[[c(1,4)]]<-c(42, 43); x }"); assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(1,NA)]<-c(42, 43); x }"); + assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(1,NaN)]<-c(42, 43); x }"); assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(NA,1)]<-c(42, 43); x }"); + assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(NaN,1)]<-c(42, 43); x }"); assertEval(Output.IgnoreErrorContext, "{ x<-1:4; dim(x)<-c(2,2); x[[c(1,0)]]<-c(42, 43); x }"); assertEval("{ x<-1:4; dim(x)<-c(2,2); x[c(1,0)]<-c(42, 43); x }"); assertEval(Output.IgnoreErrorContext, "{ x<-1:4; dim(x)<-c(2,2); x[[c(1,0,0)]]<-c(42, 43); x }"); @@ -689,6 +703,9 @@ public class TestSimpleVectors extends TestBase { assertEval("{ e <- quote(f(x=a, y=b)); names(e[-1]) }"); assertEval("{ x<-quote(function(x, y) 42); x[[2]] }"); + assertEval("{ x<-quote(function(x, y) 42); x[2] }"); + assertEval("{ x<-quote(function(x, y) 42); x[NA] }"); + assertEval("{ x<-quote(function(x, y) 42); x[NaN] }"); assertEval("{ x<-quote(function(x, y) 42); typeof(x[[2]][[1]]) }"); assertEval("{ x<-quote(function(x, y) 42); names(x[[2]]) }"); assertEval("{ x<-quote(function(x, y=7) 42); x[[2]] }");