diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java index a4f4376e81f3e66bcf3cb7b7ff17eae0670faeb9..39146e8235b4014f1139a75ad00cb489a2347732 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java @@ -10,7 +10,7 @@ */ package com.oracle.truffle.r.nodes.builtin.base; -import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asIntegerVector; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asIntegerVectorClosure; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.complexValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.logicalValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue; @@ -55,7 +55,7 @@ public abstract class APerm extends RBuiltinNode.Arg3 { static { Casts casts = new Casts(APerm.class); casts.arg("a").mustNotBeNull(RError.Message.FIRST_ARG_MUST_BE_ARRAY); - casts.arg("perm").allowNull().mustBe(numericValue().or(stringValue()).or(complexValue())).mapIf(numericValue().or(complexValue()), asIntegerVector(true)); + casts.arg("perm").allowNull().mustBe(numericValue().or(stringValue()).or(complexValue())).mapIf(numericValue().or(complexValue()), asIntegerVectorClosure()); casts.arg("resize").mustBe(numericValue().or(logicalValue()), Message.INVALID_LOGICAL, "resize").asLogicalVector().findFirst(); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java index 85c0769241a35b602183128d8678d083897131b7..d22c10086a9be1b3f9388fb1bce0ac9bc72c2122 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java @@ -332,16 +332,16 @@ public final class CastBuilder { return new CoercionStep<>(RType.Integer, true); } - public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean reuseNonShared) { - return new CoercionStep<>(RType.Integer, true, false, false, false, true, reuseNonShared); + public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVectorClosure() { + return new CoercionStep<>(RType.Integer, true, false, false, false, true, true); } public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, false); } - public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) { - return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, reuseNonShared); + public static <T> PipelineStep<T, RAbstractIntVector> asIntegerVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { + return new CoercionStep<>(RType.Integer, true, preserveNames, preserveDimensions, preserveAttributes, true, true); } public static <T> PipelineStep<T, Double> asDouble() { @@ -352,10 +352,18 @@ public final class CastBuilder { return new CoercionStep<>(RType.Double, true); } + public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVectorClosure() { + return new CoercionStep<>(RType.Double, true, false, false, false, true, true); + } + public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { return new CoercionStep<>(RType.Double, true, preserveNames, preserveDimensions, preserveAttributes); } + public static <T> PipelineStep<T, RAbstractDoubleVector> asDoubleVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { + return new CoercionStep<>(RType.Double, true, preserveNames, preserveDimensions, preserveAttributes, true, true); + } + public static <T> PipelineStep<T, String> asString() { return new CoercionStep<>(RType.Character, false); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java index 474168dc902036a5048faa506fbe0044b73cda1b..4e9bdc24d38dd198fe16a92a601791aa425af6d8 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java @@ -177,11 +177,10 @@ public abstract class PipelineStep<T, R> { public final boolean vectorCoercion; /** - * Allows the cast node to create and use wrappers for non-shared vectors. Only use if you - * know the vector to be casted won't escape and preferably if the vector is just used - * read-only. + * Allows the cast node to create and use wrappers for vectors. Only use if you know the + * vector to be casted won't escape and preferably if the vector is just used read-only. */ - public final boolean reuseNonShared; + public final boolean useClosure; public CoercionStep(RType type, boolean vectorCoercion) { this(type, vectorCoercion, false, false, false, true, false); @@ -191,14 +190,14 @@ public abstract class PipelineStep<T, R> { this(type, vectorCoercion, preserveNames, preserveDimensions, preserveAttributes, true, false); } - public CoercionStep(RType type, boolean vectorCoercion, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean preserveNonVector, boolean reuseNonShared) { + public CoercionStep(RType type, boolean vectorCoercion, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean preserveNonVector, boolean useClosure) { this.type = type; this.vectorCoercion = vectorCoercion; this.preserveNames = preserveNames; this.preserveAttributes = preserveAttributes; this.preserveDimensions = preserveDimensions; this.preserveNonVector = preserveNonVector; - this.reuseNonShared = reuseNonShared; + this.useClosure = useClosure; } public RType getType() { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java index f9f7dde80c9c629b08eb5f684d7a35608535093a..e0c252dfd5387ebc560c2f338682add035352804 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineToCastNode.java @@ -226,11 +226,11 @@ public final class PipelineToCastNode { RType type = step.getType(); switch (type) { case Integer: - return step.vectorCoercion ? CastIntegerNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared) - : CastIntegerBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared); + return step.vectorCoercion ? CastIntegerNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure) + : CastIntegerBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure); case Double: - return step.vectorCoercion ? CastDoubleNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared) - : CastDoubleBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.reuseNonShared); + return step.vectorCoercion ? CastDoubleNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure) + : CastDoubleBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes, false, step.useClosure); case Character: return step.vectorCoercion ? CastStringNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes) : CastStringBaseNodeGen.create(step.preserveNames, step.preserveDimensions, step.preserveAttributes); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java index bd4a64d4495fafce14268ffefce2f12595c60e04..0773eb292340d60d60a681cadc752f56aeca219a 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/InitialPhaseBuilder.java @@ -150,30 +150,32 @@ public class InitialPhaseBuilder<T> extends ArgCastBuilder<T, InitialPhaseBuilde return this; } - public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) { - pipelineBuilder().appendAsVector(RType.Integer, preserveNames, preserveDimensions, preserveAttributes, reuseNonShared); + public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { + pipelineBuilder().appendAsVector(RType.Integer, preserveNames, preserveDimensions, preserveAttributes); return new CoercedPhaseBuilder<>(pipelineBuilder(), Integer.class); } - public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { - return asIntegerVector(preserveNames, preserveDimensions, preserveAttributes, false); + public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector() { + return asIntegerVector(false, false, false); } - public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector() { - return asIntegerVector(false, false, false, false); + public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { + pipelineBuilder().appendAsVectorClosure(RType.Integer, preserveNames, preserveDimensions, preserveAttributes); + return new CoercedPhaseBuilder<>(pipelineBuilder(), Integer.class); } - public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVector(boolean reuseNonShared) { - return asIntegerVector(false, false, false, reuseNonShared); + public CoercedPhaseBuilder<RAbstractIntVector, Integer> asIntegerVectorClosure() { + return asIntegerVectorClosure(false, false, false); } - public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) { - pipelineBuilder().appendAsVector(RType.Double, preserveNames, preserveDimensions, preserveAttributes, reuseNonShared); + public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVectorClosure(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { + pipelineBuilder().appendAsVectorClosure(RType.Double, preserveNames, preserveDimensions, preserveAttributes); return new CoercedPhaseBuilder<>(pipelineBuilder(), Double.class); } public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { - return asDoubleVector(preserveNames, preserveDimensions, preserveAttributes, false); + pipelineBuilder().appendAsVector(RType.Double, preserveNames, preserveDimensions, preserveAttributes); + return new CoercedPhaseBuilder<>(pipelineBuilder(), Double.class); } public CoercedPhaseBuilder<RAbstractDoubleVector, Double> asDoubleVector() { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java index bc3596e0b7faebc9e59ce4739bb16883a28503f5..c40a4f293f33174ced113f85aa4b89a345390bc3 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/fluent/PipelineBuilder.java @@ -84,9 +84,9 @@ public final class PipelineBuilder { append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, false)); } - public void appendAsVector(RType type, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean reuseNonShared) { + public void appendAsVectorClosure(RType type, boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { assert type == RType.Integer || type == RType.Double || type == RType.Complex || type == RType.Character || type == RType.Logical || type == RType.Raw; - append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, reuseNonShared)); + append(new CoercionStep<>(type, true, preserveNames, preserveDimensions, preserveAttributes, true, true)); } public void appendNotNA(Object naReplacement, Message message, Object[] messageArgs) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java index 46d1c12b92bce59399c1a4f98da2bc332002b5df..8216976903f773de772b3b7bea546ad3d34e26cd 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastBaseNode.java @@ -41,7 +41,6 @@ import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.RSharingAttributeStorage; import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.RTypedValue; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; @@ -65,8 +64,8 @@ public abstract class CastBaseNode extends CastNode { private final boolean preserveDimensions; private final boolean preserveAttributes; - /** {@code true} if a cast should try to reuse a non-shared vector. */ - private final boolean reuseNonShared; + /** {@code true} if a cast should wrap the input in a closure. */ + private final boolean useClosure; /** * GnuR provides several, sometimes incompatible, ways to coerce given value to given type. This @@ -83,7 +82,7 @@ public abstract class CastBaseNode extends CastNode { this(preserveNames, preserveDimensions, preserveAttributes, forRFFI, false); } - protected CastBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean reuseNonShared) { + protected CastBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) { this.preserveNames = preserveNames; this.preserveDimensions = preserveDimensions; this.preserveAttributes = preserveAttributes; @@ -91,8 +90,8 @@ public abstract class CastBaseNode extends CastNode { if (preserveDimensions) { getDimNamesNode = GetDimNamesAttributeNode.create(); } - this.reuseNonShared = reuseNonShared; - reuseClassProfile = reuseNonShared ? ValueProfile.createClassProfile() : null; + this.useClosure = useClosure; + reuseClassProfile = useClosure ? ValueProfile.createClassProfile() : null; } public final boolean preserveNames() { @@ -112,7 +111,7 @@ public abstract class CastBaseNode extends CastNode { } public final boolean reuseNonShared() { - return reuseNonShared; + return useClosure; } protected abstract RType getTargetType(); @@ -183,12 +182,12 @@ public abstract class CastBaseNode extends CastNode { return RNull.instance; } - protected boolean isReusable(RAbstractVector v) { - return reuseNonShared; + protected boolean useClosure() { + return useClosure; } protected RAbstractVector castWithReuse(RType targetType, RAbstractVector v, ConditionProfile naProfile) { - assert isReusable(v); + assert useClosure(); return reuseClassProfile.profile(v.castSafe(targetType, naProfile, preserveAttributes())); } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java index 6fee221df0e9d383b8dad2318ddb419e0d958928..15a9514d39ce31cb0f683a2a18472e2e6b626c5b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleBaseNode.java @@ -44,8 +44,8 @@ public abstract class CastDoubleBaseNode extends CastBaseNode { super(preserveNames, preserveDimensions, preserveAttributes); } - protected CastDoubleBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) { - super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse); + protected CastDoubleBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) { + super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure); } @Override diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java index a135756833ffea7d43c49a09d1c33abcd724d83f..67ee125a0dec3d022d9f92eaae74a3f13ca67253 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java @@ -92,27 +92,27 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { return vectorCopy(operand, ddata, !seenNA); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") protected RAbstractDoubleVector doIntVectorReuse(RAbstractIntVector operand) { return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") protected RAbstractDoubleVector doLogicalVectorDimsReuse(RAbstractLogicalVector operand) { return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") protected RAbstractDoubleVector doRawVectorReuse(RRawVector operand) { return (RAbstractDoubleVector) castWithReuse(RType.Double, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") protected RDoubleVector doIntVector(RAbstractIntVector operand) { return createResultVector(operand, index -> naCheck.convertIntToDouble(operand.getDataAt(index))); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") protected RDoubleVector doLogicalVectorDims(RAbstractLogicalVector operand) { return createResultVector(operand, index -> naCheck.convertLogicalToDouble(operand.getDataAt(index))); } @@ -172,7 +172,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { return vectorCopy(operand, ddata, naCheck.neverSeenNA()); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") protected RDoubleVector doRawVector(RRawVector operand) { return createResultVector(operand, index -> RRuntime.raw2double(operand.getDataAt(index))); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java index 10e420d5b12078a830e6c6190c09a515eecfc7f2..f2239927848c6102bf34bd31802ae2bd9f7656e6 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerBaseNode.java @@ -41,8 +41,8 @@ public abstract class CastIntegerBaseNode extends CastBaseNode { @Child private CastIntegerNode recursiveCastInteger; - protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) { - super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse); + protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) { + super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure); } protected CastIntegerBaseNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java index 79df7b5d660b38c82f2451c5729d45e3ff0a5f91..636037c3cf469d5c28c220d53131410507d39f7d 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java @@ -57,8 +57,8 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode { private final BranchProfile warningBranch = BranchProfile.create(); - protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean withReuse) { - super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, withReuse); + protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes, boolean forRFFI, boolean useClosure) { + super(preserveNames, preserveDimensions, preserveAttributes, forRFFI, useClosure); } protected CastIntegerNode(boolean preserveNames, boolean preserveDimensions, boolean preserveAttributes) { @@ -160,32 +160,32 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode { return vectorCopy(operand, idata, !seenNA); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") public RAbstractIntVector doLogicalVectorReuse(RAbstractLogicalVector operand) { return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") protected RAbstractIntVector doDoubleVectorReuse(RAbstractDoubleVector operand) { return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "isReusable(operand)") + @Specialization(guards = "useClosure()") protected RAbstractIntVector doRawVectorReuse(RAbstractRawVector operand) { return (RAbstractIntVector) castWithReuse(RType.Integer, operand, naProfile.getConditionProfile()); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") public RIntVector doLogicalVector(RAbstractLogicalVector operand) { return createResultVector(operand, index -> naCheck.convertLogicalToInt(operand.getDataAt(index))); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") protected RIntVector doDoubleVector(RAbstractDoubleVector operand) { return vectorCopy(operand, naCheck.convertDoubleVectorToIntData(operand), naCheck.neverSeenNA()); } - @Specialization(guards = "!isReusable(operand)") + @Specialization(guards = "!useClosure()") protected RIntVector doRawVector(RAbstractRawVector operand) { return createResultVector(operand, index -> RRuntime.raw2int(operand.getDataAt(index))); } 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 0ce65d24bf23991d78283fc76837e4c42ee96134..d02c501de9217e54eb28ae905d53e38f2c4e19bf 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 @@ -69573,7 +69573,7 @@ Error in t.default(new.env()) : argument is not a matrix b 1 c 2 -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(1:8, 2, 4) ; t(m) } [,1] [,2] [1,] 1 2 @@ -69581,7 +69581,7 @@ c 2 [3,] 5 6 [4,] 7 8 -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(as.raw(c(1:8)), 2, 4); t(m) } [,1] [,2] [1,] 01 02 @@ -69589,7 +69589,7 @@ c 2 [3,] 05 06 [4,] 07 08 -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(c('1', '2', '3', '4', '5', '6', '7', '8'), 2, 4); t(m) } [,1] [,2] [1,] "1" "2" @@ -69597,7 +69597,7 @@ c 2 [3,] "5" "6" [4,] "7" "8" -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(c(T, F, F, F, T, F, F, T), 2, 4); t(m) } [,1] [,2] [1,] TRUE FALSE @@ -69605,7 +69605,7 @@ c 2 [3,] TRUE FALSE [4,] FALSE TRUE -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(list(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8), 2, 4); t(m) } [,1] [,2] [1,] 1 2 @@ -69613,7 +69613,7 @@ c 2 [3,] 5 6 [4,] 7 8 -##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNotSquare# +##com.oracle.truffle.r.test.builtins.TestBuiltin_t.testTransposeNonSquare# #{ m <- matrix(seq(0.1,0.8,0.1), 2, 4) ; t(m) } [,1] [,2] [1,] 0.1 0.2