diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsCharacter.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsCharacter.java index 0c000916060ff4187bd10ca3e9214b106621644f..9059814482fce42892d3fd5d1cf58400b1cf9408 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsCharacter.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsCharacter.java @@ -24,6 +24,9 @@ package com.oracle.truffle.r.nodes.builtin.base; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asStringVector; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyStringVector; import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -34,8 +37,8 @@ import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.RDeparse; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.builtins.RBuiltin; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; @@ -47,16 +50,11 @@ public abstract class AsCharacter extends RBuiltinNode { static { Casts casts = new Casts(AsCharacter.class); - casts.arg("x").mapIf(instanceOf(RAbstractListVector.class).not(), asStringVector()); + casts.arg("x").returnIf(missingValue().or(nullValue()), emptyStringVector()).mapIf(instanceOf(RAbstractListVector.class).not(), asStringVector()); } @Specialization - protected RAbstractStringVector asCharacter(@SuppressWarnings("unused") RNull n) { - return RDataFactory.createEmptyStringVector(); - } - - @Specialization - protected RAbstractStringVector asCharacter(RAbstractStringVector v) { + protected RAbstractStringVector asCharacter(RAbstractStringVector v, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { if (noAttributes.profile(v.getAttributes() == null)) { return v; } else { @@ -65,7 +63,7 @@ public abstract class AsCharacter extends RBuiltinNode { } @Specialization - protected RStringVector asCharacter(RAbstractListVector list) { + protected RStringVector asCharacter(RAbstractListVector list, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { int len = list.getLength(); boolean complete = RDataFactory.COMPLETE_VECTOR; String[] data = new String[len]; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsComplex.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsComplex.java index 468752482966f3f41627408ee460d278d019bf50..1ac005ce1bdee4b2298209a61c8d265f16e759e7 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsComplex.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsComplex.java @@ -22,6 +22,9 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyComplexVector; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -30,8 +33,7 @@ import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.RDispatch; import com.oracle.truffle.r.runtime.builtins.RBuiltin; -import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RNull; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; @RBuiltin(name = "as.complex", kind = PRIMITIVE, dispatch = RDispatch.INTERNAL_GENERIC, parameterNames = {"x", "..."}, behavior = PURE) @@ -41,16 +43,11 @@ public abstract class AsComplex extends RBuiltinNode { static { Casts casts = new Casts(AsComplex.class); - casts.arg("x").asComplexVector(); + casts.arg("x").returnIf(missingValue().or(nullValue()), emptyComplexVector()).asComplexVector(); } @Specialization - protected RAbstractComplexVector asComplex(@SuppressWarnings("unused") RNull n) { - return RDataFactory.createEmptyComplexVector(); - } - - @Specialization - protected RAbstractComplexVector asComplex(RAbstractComplexVector v) { + protected RAbstractComplexVector asComplex(RAbstractComplexVector v, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { if (noAttributes.profile(v.getAttributes() == null)) { return v; } else { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java index 7c65477dadaea01b5be7c7d03bf7f92fbad9f12d..a8e7d27ae6ef2e8fbef5317d2d217cfdc516de65 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java @@ -22,6 +22,9 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyDoubleVector; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -29,8 +32,7 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.builtins.RBuiltin; -import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RNull; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; @RBuiltin(name = "as.double", aliases = {"as.numeric"}, kind = PRIMITIVE, parameterNames = {"x", "..."}, behavior = PURE) @@ -40,16 +42,11 @@ public abstract class AsDouble extends RBuiltinNode { static { Casts casts = new Casts(AsDouble.class); - casts.arg("x").asDoubleVector(); + casts.arg("x").returnIf(missingValue().or(nullValue()), emptyDoubleVector()).asDoubleVector(); } @Specialization - protected RAbstractDoubleVector asDouble(@SuppressWarnings("unused") RNull n) { - return RDataFactory.createEmptyDoubleVector(); - } - - @Specialization - protected RAbstractDoubleVector asDouble(RAbstractDoubleVector v) { + protected RAbstractDoubleVector asDouble(RAbstractDoubleVector v, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { if (noAttributes.profile(v.getAttributes() == null)) { return v; } else { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java index f7beffc392de4f77b2af3ee0d97f6649594bf5af..79e6144769b78e8fdfc6d8c21760ea35fa1a3197 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java @@ -22,6 +22,9 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyIntegerVector; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -29,8 +32,7 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.builtins.RBuiltin; -import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RNull; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; @RBuiltin(name = "as.integer", kind = PRIMITIVE, parameterNames = {"x", "..."}, behavior = PURE) @@ -40,16 +42,11 @@ public abstract class AsInteger extends RBuiltinNode { static { Casts casts = new Casts(AsInteger.class); - casts.arg("x").asIntegerVector(); + casts.arg("x").returnIf(missingValue().or(nullValue()), emptyIntegerVector()).asIntegerVector(); } @Specialization - protected RAbstractIntVector asInteger(@SuppressWarnings("unused") RNull n) { - return RDataFactory.createEmptyIntVector(); - } - - @Specialization - protected RAbstractIntVector asInteger(RAbstractIntVector v) { + protected RAbstractIntVector asInteger(RAbstractIntVector v, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { if (noAttributes.profile(v.getAttributes() == null)) { return v; } else { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java index 5df1046a5c2b07131232094753f0ae1ba5b7792b..e9eb0ca41ea33b2cbf66fbcf5d871102b47cc4f2 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java @@ -22,6 +22,9 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.emptyLogicalVector; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -29,8 +32,7 @@ import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.builtins.RBuiltin; -import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RNull; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; @RBuiltin(name = "as.logical", kind = PRIMITIVE, parameterNames = {"x", "..."}, behavior = PURE) @@ -40,16 +42,11 @@ public abstract class AsLogical extends RBuiltinNode { static { Casts casts = new Casts(AsLogical.class); - casts.arg("x").asLogicalVector(); + casts.arg("x").returnIf(missingValue().or(nullValue()), emptyLogicalVector()).asLogicalVector(); } @Specialization - protected RAbstractLogicalVector asLogicaleger(@SuppressWarnings("unused") RNull n) { - return RDataFactory.createEmptyLogicalVector(); - } - - @Specialization - protected RAbstractLogicalVector asLogicaleger(RAbstractLogicalVector v) { + protected RAbstractLogicalVector asLogicaleger(RAbstractLogicalVector v, @SuppressWarnings("unused") RArgsValuesAndNames dotdotdot) { if (noAttributes.profile(v.getAttributes() == null)) { return v; } else { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java index cd935a7b146abb247afba1ce5a7ac40d0e740923..ef2911acc2511132e57644301ca4da9c736a415d 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsRaw.java @@ -22,12 +22,14 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.ConditionProfile; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; +import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RNull; @@ -40,7 +42,7 @@ public abstract class AsRaw extends RBuiltinNode { static { Casts casts = new Casts(AsRaw.class); - casts.arg("x").allowNull().asRawVector(); + casts.arg("x").mustBe(missingValue().not(), RError.Message.ARGUMENTS_PASSED, 0, "'as.raw'", 1).asRawVector(); } @Specialization diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bincode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bincode.java index ee5ee09e4059fffbd3bcb89209d8d6210ef4e301..32498303a19d4a3ac501709c7e053f3cef7e3b98 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bincode.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bincode.java @@ -22,6 +22,7 @@ import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RIntVector; +import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.ops.na.NACheck; @@ -32,15 +33,33 @@ public abstract class Bincode extends RBuiltinNode { static { Casts casts = new Casts(Bincode.class); - casts.arg("x").asDoubleVector(); + casts.arg("x").mustNotBeMissing(RError.Message.ARGUMENT_EMPTY, 1).asDoubleVector(); - casts.arg("breaks").asDoubleVector(); + casts.arg("breaks").mustNotBeMissing(RError.Message.ARGUMENT_EMPTY, 2).asDoubleVector(); casts.arg("right").asLogicalVector().findFirst().map(toBoolean()); casts.arg("include.lowest").asLogicalVector().findFirst().map(toBoolean()); } + @SuppressWarnings("unused") + @Specialization + RIntVector formatC(RNull x, RAbstractDoubleVector breaks, boolean right, boolean includeBorder) { + return RDataFactory.createEmptyIntVector(); + } + + @SuppressWarnings("unused") + @Specialization + RIntVector formatC(RNull x, RNull breaks, boolean right, boolean includeBorder) { + return RDataFactory.createEmptyIntVector(); + } + + @SuppressWarnings("unused") + @Specialization + RIntVector formatC(RAbstractDoubleVector x, RNull breaks, boolean right, boolean includeBorder) { + return RDataFactory.createIntVector(x.getLength(), true); + } + @Specialization RIntVector formatC(RAbstractDoubleVector x, RAbstractDoubleVector breaks, boolean right, boolean includeBorder) { int n = x.getLength(); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java index 439d14b064fe5c4918b8f2412099a3148ca117f7..f90deab4bfdc072d82fd2d12c830743c506abdb1 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java @@ -17,6 +17,7 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asStringVect import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.chain; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.integerValue; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.shouldBe; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.typeName; @@ -205,8 +206,9 @@ public class BitwiseFunctions { static { Casts casts = new Casts(BitwiseShiftR.class); - casts.arg("a").defaultError(RError.Message.UNIMPLEMENTED_TYPE_IN_FUNCTION, typeName(), Operation.SHIFTR.name).mustBe(doubleValue().or(integerValue())).asIntegerVector(); - casts.arg("n").mapIf(stringValue(), asStringVector(), asIntegerVector()); + casts.arg("a").defaultError(RError.Message.UNIMPLEMENTED_TYPE_IN_FUNCTION, typeName(), Operation.SHIFTR.name).mustBe(missingValue().not()).mustBe( + doubleValue().or(integerValue())).asIntegerVector(); + casts.arg("n").allowNull().mustBe(missingValue().not()).mapIf(stringValue(), asStringVector(), asIntegerVector()); } @Specialization @@ -234,7 +236,7 @@ public class BitwiseFunctions { Casts casts = new Casts(BitwiseShiftL.class); casts.arg("a").defaultError(RError.Message.UNIMPLEMENTED_TYPE_IN_FUNCTION, typeName(), Operation.SHIFTL.name).mustBe( doubleValue().or(integerValue())).asIntegerVector(); - casts.arg("n").allowNull().mapIf(stringValue(), chain(asStringVector()).with(shouldBe(anyValue().not(), RError.Message.NA_INTRODUCED_COERCION)).end(), + casts.arg("n").allowNull().mustBe(missingValue().not()).mapIf(stringValue(), chain(asStringVector()).with(shouldBe(anyValue().not(), RError.Message.NA_INTRODUCED_COERCION)).end(), asIntegerVector()); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DatePOSIXFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DatePOSIXFunctions.java index c33f2d9649f76065e726db65f80699ece1504231..f63bcc40cca8afb779688317d52297f773cffa4a 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DatePOSIXFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DatePOSIXFunctions.java @@ -179,8 +179,8 @@ public class DatePOSIXFunctions { static { Casts casts = new Casts(AsPOSIXlt.class); - casts.arg("x").mapNull(emptyDoubleVector()).asDoubleVector(true, false, false); - casts.arg("tz").asStringVector().findFirst(""); + casts.arg("x").mapNull(emptyDoubleVector()).mustBe(missingValue().not()).asDoubleVector(true, false, false); + casts.arg("tz").mustNotBeMissing().asStringVector().findFirst(""); } @Specialization diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java index 2bfc22099def4bcf2ed73eef7777e2e570f77cce..88717774e1a3cb50d7ab58b96a0da664f307de30 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java @@ -11,7 +11,9 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; @@ -101,11 +103,11 @@ public class GrepFunctions { } protected static void castCosts(Casts casts) { - casts.arg("costs").asIntegerVector(); + casts.arg("costs").defaultError(RError.Message.INVALID_ARG, "costs").mustBe((missingValue().or(nullValue()).not())).asIntegerVector(); } protected static void castBounds(Casts casts) { - casts.arg("bounds").asDoubleVector(); + casts.arg("bounds").defaultError(RError.Message.INVALID_ARG, "bounds").mustBe((missingValue().or(nullValue()).not())).asDoubleVector(); } /** diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java index 20f38f2b25bd319277b5f9c42bb7b6e1b1b925c0..b579cd587c27cfa11868438f7060b6013fed2eb0 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java @@ -11,6 +11,7 @@ package com.oracle.truffle.r.nodes.builtin.base; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -52,8 +53,8 @@ public abstract class UpdateClass extends RBuiltinNode { static { Casts casts = new Casts(UpdateClass.class); - casts.arg("x"); // disallows null - casts.arg("value").asStringVector(); + casts.arg("x").mustBe(missingValue().not(), RError.Message.ARGUMENT_EMPTY, 1); + casts.arg("value").mustBe(missingValue().not(), RError.Message.ARGUMENT_EMPTY, 2).asStringVector(); } @Specialization @@ -64,6 +65,11 @@ public abstract class UpdateClass extends RBuiltinNode { return result; } + @Specialization + protected Object setClass(@SuppressWarnings("unused") RNull arg, @SuppressWarnings("unused") Object className) { + throw error(RError.Message.SET_ATTRIBUTES_ON_NULL); + } + @Specialization(limit = "CACHE_LIMIT", guards = "cachedClassName == className") protected Object setClassCached(RAbstractContainer arg, @SuppressWarnings("unused") String className, @Cached("className") String cachedClassName, diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/BreakBuiltin.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/BreakBuiltin.java index b4dea21f7484e6fae3bc9130ff148ae5fd745b07..e1aab99445af84d0a01e5c0d580f800710a7e673 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/BreakBuiltin.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/BreakBuiltin.java @@ -32,6 +32,10 @@ import com.oracle.truffle.r.runtime.builtins.RBuiltin; @RBuiltin(name = "break", kind = PRIMITIVE, parameterNames = {"x"}, behavior = COMPLEX) public abstract class BreakBuiltin extends RBuiltinNode { + static { + Casts.noCasts(BreakBuiltin.class); + } + @Specialization protected Object doIt(@SuppressWarnings("unused") Object x) { throw RInternalError.unimplemented(); 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 bb1f1db8422ae9b40d717832ea17eb5d6d77345f..f263e95c09ba7a7061c57e8701408ed1807fbfc9 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 @@ -4827,6 +4827,14 @@ numeric(0) #argv <- list(structure(list(sec = 0, min = 0L, hour = 0L, mday = 22:27, mon = 3L, year = 108L, wday = 2L, yday = 112L, isdst = -1L), .Names = c('sec', 'min', 'hour', 'mday', 'mon', 'year', 'wday', 'yday', 'isdst'), class = c('POSIXlt', 'POSIXt'), tzone = 'GMT'), 'GMT'); .Internal(as.POSIXct(argv[[1]], argv[[2]])) [1] 1208822400 1208908800 1208995200 1209081600 1209168000 1209254400 +##com.oracle.truffle.r.test.builtins.TestBuiltin_asPOSIXlt.testasPOSIXlt# +#.Internal(as.POSIXlt(, 1)) +Error in .Internal(as.POSIXlt(, 1)) : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_asPOSIXlt.testasPOSIXlt# +#.Internal(as.POSIXlt(2, )) +Error in .Internal(as.POSIXlt(2, )) : argument 2 is empty + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asPOSIXlt.testasPOSIXlt1# #argv <- list(structure(c(2147483648.4, 2147483648.8), class = c('POSIXct', 'POSIXt'), tzone = ''), ''); .Internal(as.POSIXlt(argv[[1]], argv[[2]])) [1] "2038-01-19 03:14:08 GMT" "2038-01-19 03:14:08 GMT" @@ -4995,6 +5003,10 @@ quote(80L) #argv <- list(list(quote(quote), NA));as.call(argv[[1]]); quote(NA) +##com.oracle.truffle.r.test.builtins.TestBuiltin_ascharacter.testAsCharacter# +#{ as.character() } +character(0) + ##com.oracle.truffle.r.test.builtins.TestBuiltin_ascharacter.testAsCharacter# #{ as.character(1) } [1] "1" @@ -5406,6 +5418,10 @@ character(0) Warning message: NAs introduced by coercion +##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex# +#{ as.complex() } +complex(0) + ##com.oracle.truffle.r.test.builtins.TestBuiltin_ascomplex.testAsComplex# #{ as.complex(0) } [1] 0+0i @@ -5538,6 +5554,10 @@ Time differences in hours Warning message: NAs introduced by coercion +##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testAsDouble# +#{ as.double() } +numeric(0) + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asdouble.testAsDouble#Output.IgnoreWarningContext# #{ as.double(10+2i) } [1] 10 @@ -6003,6 +6023,10 @@ numeric(0) Warning message: NAs introduced by coercion +##com.oracle.truffle.r.test.builtins.TestBuiltin_asinteger.testAsInteger# +#{ as.integer() } +integer(0) + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asinteger.testAsInteger# #{ as.integer(-0/0) } [1] NA @@ -6601,6 +6625,10 @@ Warning messages: Warning message: out-of-range values treated as 0 in coercion to raw +##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw# +#{ as.raw() } +Error in as.raw() : 0 arguments passed to 'as.raw' which requires 1 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext# #{ as.raw(-1) } [1] 00 @@ -9127,6 +9155,22 @@ numeric(0) #argv <- structure(list(a = 1e-200, b = 1e-200), .Names = c('a', 'b'));do.call('beta', argv) [1] 2e+200 +##com.oracle.truffle.r.test.builtins.TestBuiltin_bincode.testBincode#Output.MayIgnoreErrorContext# +#{ .Internal(bincode(, 1, T, T)) } +Error in .Internal(bincode(, 1, T, T)) : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_bincode.testBincode#Output.MayIgnoreErrorContext# +#{ .Internal(bincode(1, ,T, T)) } +Error in .Internal(bincode(1, , T, T)) : argument 2 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_bincode.testBincode# +#{ .Internal(bincode(2, NULL, T, T)) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_bincode.testBincode# +#{ .Internal(bincode(NULL, 2, T, T)) } +integer(0) + ##com.oracle.truffle.r.test.builtins.TestBuiltin_bincode.testBincode# #{ x <- c(0, 0.01, 0.5, 0.99, 1); b <- c(0, 0, 1, 1); .bincode(x, b, FALSE) } [1] 2 2 2 2 NA @@ -9266,6 +9310,14 @@ Error in bitwOr(c(1, 2, 3, 4), c(3 + (0+3i))) : [25] -33554432 -67108864 -134217728 -268435456 -536870912 -1073741824 [31] NA +##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftL.testBitwiseFunctions# +#{ .Internal(bitwiseShiftL(, 1))} +Error in .Internal(bitwiseShiftL(, 1)) : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftL.testBitwiseFunctions# +#{ .Internal(bitwiseShiftL(200, ))} +Error in .Internal(bitwiseShiftL(200, )) : argument 2 is empty + ##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftL.testBitwiseFunctions# #{ bitwShiftL(TRUE, c(TRUE, FALSE)) } Error in bitwShiftL(TRUE, c(TRUE, FALSE)) : @@ -9305,6 +9357,14 @@ In bitwShiftL(c(3, 2, 4), c(3 + (0+3i))) : #{ bitwShiftL(c(8,4,2), NULL) } integer(0) +##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftR.testBitwiseFunctions# +#{ .Internal(bitwiseShiftR(, 1))} +Error in .Internal(bitwiseShiftR(, 1)) : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftR.testBitwiseFunctions# +#{ .Internal(bitwiseShiftR(200, ))} +Error in .Internal(bitwiseShiftR(200, )) : argument 2 is empty + ##com.oracle.truffle.r.test.builtins.TestBuiltin_bitwiseShiftR.testBitwiseFunctions#Ignored.Unknown# #{ bitwShiftR(c(1,2,3,4), c("Hello")) } [1] NA NA NA NA @@ -12884,6 +12944,18 @@ function() 42 #{ x=1;class(x)<-"character"; x} [1] "1" +##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# +#{`class<-`(, "foo") } +Error in `class<-`(, "foo") : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# +#{`class<-`(, ) } +Error in `class<-`(, ) : argument 1 is empty + +##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# +#{`class<-`(NULL, "first") } +Error: attempt to set an attribute on NULL + ##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# #{x<-"abc";class(x)<-"a";class(x)<-"character";x;} [1] "abc" @@ -13005,6 +13077,10 @@ Error in class(x) <- "array" : #{x<-c(2+3i,4+5i);class(x)<-"a";class(x)<-"complex";x;} [1] 2+3i 4+5i +##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# +#{x=1; `class<-`(x, ) } +Error in `class<-`(x, ) : argument 2 is empty + ##com.oracle.truffle.r.test.builtins.TestBuiltin_classassign.testUpdateClass# #{x=1; class(x)<-"first"; x;} [1] 1 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asPOSIXlt.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asPOSIXlt.java index b6cb25016bab4b51ae4f702f7b50d52b48536fc5..782fe19c2eaf556d676f63f9a936b36cd5bdb3b0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asPOSIXlt.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asPOSIXlt.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2014, Purdue University - * Copyright (c) 2014, 2016, Oracle and/or its affiliates + * Copyright (c) 2014, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -13,6 +13,7 @@ package com.oracle.truffle.r.test.builtins; import org.junit.Test; import com.oracle.truffle.r.test.TestBase; +import com.oracle.truffle.r.test.TestBase.Output; // Checkstyle: stop line length check public class TestBuiltin_asPOSIXlt extends TestBase { @@ -71,4 +72,10 @@ public class TestBuiltin_asPOSIXlt extends TestBase { public void testasPOSIXlt11() { assertEval("argv <- list(NULL, ''); .Internal(as.POSIXlt(argv[[1]], argv[[2]]))"); } + + @Test + public void testasPOSIXlt() { + assertEval(Output.MayIgnoreErrorContext, ".Internal(as.POSIXlt(, 1))"); + assertEval(Output.MayIgnoreErrorContext, ".Internal(as.POSIXlt(2, ))"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java index 551890dda835ba3c7345b6594e5993e9160986c6..c14ea94779518649d14ea38c2f50ae62e5c8802c 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascharacter.java @@ -249,6 +249,7 @@ public class TestBuiltin_ascharacter extends TestBase { @Test public void testAsCharacter() { + assertEval("{ as.character() }"); assertEval("{ as.character(1) }"); assertEval("{ as.character(1L) }"); assertEval("{ as.character(TRUE) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java index e8c02db81367dfeafb82b671b8e4771134568f50..7f63eca369365b415e2d414f107f1e5e6cd2f87f 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_ascomplex.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -74,6 +74,7 @@ public class TestBuiltin_ascomplex extends TestBase { @Test public void testAsComplex() { + assertEval("{ as.complex() }"); assertEval("{ as.complex(0) }"); assertEval("{ as.complex(TRUE) }"); assertEval("{ as.complex(\"1+5i\") }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java index be3fdc04e5c106ffc04ba0c3b82b29936cdcc8b5..2277c791797344f2663cb0b96fada0a8b4cd49a1 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asdouble.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -175,6 +175,7 @@ public class TestBuiltin_asdouble extends TestBase { @Test public void testAsDouble() { + assertEval("{ as.double() }"); assertEval("{ as.double(\"1.27\") }"); assertEval("{ as.double(1L) }"); assertEval("{ as.double(as.raw(1)) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java index dc6b2ebb7ac90798f560f21007f87cbc3592583f..6efaa38af0fc646336bef5e74fa19a7281053daa 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asinteger.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -116,6 +116,7 @@ public class TestBuiltin_asinteger extends TestBase { @Test public void testAsInteger() { + assertEval("{ as.integer() }"); assertEval("{ as.integer(\"1\") }"); assertEval("{ as.integer(c(\"1\",\"2\")) }"); assertEval("{ as.integer(c(1,2,3)) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java index cd7d0198a34beb1d9641563e31ec0d82da549305..d8c0187dacfb3f77352b69a7d78d97ffad8bf785 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java @@ -49,6 +49,7 @@ public class TestBuiltin_asraw extends TestBase { @Test public void testAsRaw() { + assertEval("{ as.raw() }"); assertEval("{ as.raw(NULL) }"); assertEval("{ as.raw(1) }"); assertEval("{ as.raw(1L) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bincode.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bincode.java index b846256ea75fa4d6d6827fbd93489d2d7ba019ff..15d35bf6b79c2be67e67ea74a4e1d74f3c088716 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bincode.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bincode.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -53,5 +53,11 @@ public class TestBuiltin_bincode extends TestBase { assertEval("{ x <- c(0, 0.01, 0.5, 0.99, 1); b <- c(0, 0, 1, 1); .bincode(x, b, FALSE) }"); assertEval("{ x <- c(0, 0.01, 0.5, 0.99, 1); b <- c(0, 0, 1, 1); .bincode(x, b, TRUE, TRUE) }"); assertEval("{ x <- c(0, 0.01, 0.5, 0.99, 1); b <- c(0, 0, 1, 1); .bincode(x, b, FALSE, TRUE) }"); + + assertEval("{ .Internal(bincode(NULL, 2, T, T)) }"); + assertEval("{ .Internal(bincode(2, NULL, T, T)) }"); + + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bincode(, 1, T, T)) }"); + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bincode(1, ,T, T)) }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftL.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftL.java index d750ef4512f5eceb0a3ed868196669f13807a4ac..d62332e72c93da6ec21490bf61041ad8d309db4a 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftL.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftL.java @@ -24,6 +24,8 @@ public class TestBuiltin_bitwiseShiftL extends TestBase { @Test public void testBitwiseFunctions() { + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bitwiseShiftL(, 1))}"); + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bitwiseShiftL(200, ))}"); assertEval("{ bitwShiftL(c(10,11,12,13,14,15), c(1,1,1,1,1,1)) }"); assertEval("{ bitwShiftL(c(100,200,300), 1) }"); assertEval("{ bitwShiftL(c(25,57,66), c(10,20,30,40,50,60)) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java index de9c5d5ae2fa1553e4bdd4114a2ee5bbb26b0391..436951f231dd6b36f1f957129ac5b2089785cf4e 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_bitwiseShiftR.java @@ -13,6 +13,7 @@ package com.oracle.truffle.r.test.builtins; import org.junit.Test; import com.oracle.truffle.r.test.TestBase; +import com.oracle.truffle.r.test.TestBase.Output; // Checkstyle: stop line length check public class TestBuiltin_bitwiseShiftR extends TestBase { @@ -24,6 +25,8 @@ public class TestBuiltin_bitwiseShiftR extends TestBase { @Test public void testBitwiseFunctions() { + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bitwiseShiftR(, 1))}"); + assertEval(Output.MayIgnoreErrorContext, "{ .Internal(bitwiseShiftR(200, ))}"); assertEval("{ bitwShiftR(c(10,11,12,13,14,15), c(1,1,1,1,1,1)) }"); assertEval("{ bitwShiftR(c(100,200,300), 1) }"); assertEval("{ bitwShiftR(c(25,57,66), c(10,20,30,40,50,60)) }"); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java index 4d2c9af5a108b1587540bff0bec573dc8f956b91..307c2f258cbe3f40911ca15dc30466d18408b609 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_classassign.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -13,6 +13,7 @@ package com.oracle.truffle.r.test.builtins; import org.junit.Test; import com.oracle.truffle.r.test.TestBase; +import com.oracle.truffle.r.test.TestBase.Output; // Checkstyle: stop line length check public class TestBuiltin_classassign extends TestBase { @@ -126,6 +127,11 @@ public class TestBuiltin_classassign extends TestBase { @Test public void testUpdateClass() { + assertEval(Output.MayIgnoreErrorContext, "{`class<-`(, \"foo\") }"); + assertEval(Output.MayIgnoreErrorContext, "{`class<-`(, ) }"); + assertEval(Output.MayIgnoreErrorContext, "{x=1; `class<-`(x, ) }"); + assertEval(Output.MayIgnoreErrorContext, "{`class<-`(NULL, \"first\") }"); + assertEval("{x=1; class(x)<-\"first\"; x;}"); assertEval("{ x=1;class(x)<-\"character\"; x}");