From 00391f39f5a44aa4e90d65fffaa68ba4f13077b1 Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Mon, 15 Jan 2018 14:14:52 +0100 Subject: [PATCH] use RAbstractXXXVector types in cast node specializations wherever possible --- .../r/nodes/unary/CastComplexNode.java | 15 ++++++------ .../truffle/r/nodes/unary/CastDoubleNode.java | 18 +++++++-------- .../r/nodes/unary/CastIntegerNode.java | 10 ++++---- .../r/nodes/unary/CastLogicalNode.java | 23 ++++++++++--------- .../truffle/r/nodes/unary/CastRawNode.java | 15 ++++++------ .../truffle/r/nodes/unary/CastStringNode.java | 20 +++++++--------- .../truffle/r/nodes/unary/PrecedenceNode.java | 18 +++++++++++++++ .../unary/UnaryArithmeticReduceNode.java | 12 +++++----- 8 files changed, 74 insertions(+), 57 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java index dc6bab1f91..ac113eb0c8 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java @@ -36,15 +36,16 @@ import com.oracle.truffle.r.runtime.data.RComplex; import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RList; -import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RRaw; -import com.oracle.truffle.r.runtime.data.RRawVector; -import com.oracle.truffle.r.runtime.data.RStringVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.ops.na.NACheck; import com.oracle.truffle.r.runtime.ops.na.NAProfile; @@ -168,12 +169,12 @@ public abstract class CastComplexNode extends CastBaseNode { } @Specialization - protected RComplexVector doLogicalVector(RLogicalVector operand) { + protected RComplexVector doLogicalVector(RAbstractLogicalVector operand) { return createResultVector(operand, index -> naCheck.convertLogicalToComplex(operand.getDataAt(index))); } @Specialization - protected RComplexVector doStringVector(RStringVector operand, + protected RComplexVector doStringVector(RAbstractStringVector operand, @Cached("createBinaryProfile()") ConditionProfile emptyStringProfile) { naCheck.enable(operand); double[] ddata = new double[operand.getLength() << 1]; @@ -211,12 +212,12 @@ public abstract class CastComplexNode extends CastBaseNode { } @Specialization - protected RComplexVector doComplexVector(RComplexVector vector) { + protected RAbstractComplexVector doComplexVector(RAbstractComplexVector vector) { return vector; } @Specialization - protected RComplexVector doRawVector(RRawVector operand) { + protected RComplexVector doRawVector(RAbstractRawVector operand) { return createResultVector(operand, index -> RDataFactory.createComplex(operand.getRawDataAt(index), 0)); } 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 ef5078d262..f0dd71f992 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 @@ -36,17 +36,17 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDoubleVector; import com.oracle.truffle.r.runtime.data.RList; -import com.oracle.truffle.r.runtime.data.RStringVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.interop.ForeignArray2R; @@ -123,7 +123,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { } @Specialization - protected RDoubleVector doStringVector(RStringVector operand, + protected RDoubleVector doStringVector(RAbstractStringVector operand, @Cached("createBinaryProfile()") ConditionProfile emptyStringProfile, @Cached("create()") BranchProfile warningBranch) { naCheck.enable(operand); @@ -160,7 +160,7 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { } @Specialization - protected RDoubleVector doComplexVector(RComplexVector operand) { + protected RDoubleVector doComplexVector(RAbstractComplexVector operand) { naCheck.enable(operand); double[] ddata = new double[operand.getLength()]; boolean warning = false; @@ -223,16 +223,16 @@ public abstract class CastDoubleNode extends CastDoubleBaseNode { } @Specialization(guards = "isForeignObject(obj)") - protected RDoubleVector doForeignObject(TruffleObject obj, + protected RAbstractDoubleVector doForeignObject(TruffleObject obj, @Cached("create()") ForeignArray2R foreignArray2R) { Object o = foreignArray2R.convert(obj); if (!RRuntime.isForeignObject(o)) { - if (o instanceof RDoubleVector) { - return (RDoubleVector) o; + if (o instanceof RAbstractDoubleVector) { + return (RAbstractDoubleVector) o; } o = castDoubleRecursive(o); - if (o instanceof RDoubleVector) { - return (RDoubleVector) o; + if (o instanceof RAbstractDoubleVector) { + return (RAbstractDoubleVector) o; } } throw error(RError.Message.CANNOT_COERCE_EXTERNAL_OBJECT_TO_VECTOR, "vector"); 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 940f8c673b..558b86015a 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 @@ -231,16 +231,16 @@ public abstract class CastIntegerNode extends CastIntegerBaseNode { } @Specialization(guards = "isForeignObject(obj)") - protected RIntVector doForeignObject(TruffleObject obj, + protected RAbstractIntVector doForeignObject(TruffleObject obj, @Cached("create()") ForeignArray2R foreignArray2R) { Object o = foreignArray2R.convert(obj); if (!RRuntime.isForeignObject(o)) { - if (o instanceof RIntVector) { - return (RIntVector) o; + if (o instanceof RAbstractIntVector) { + return (RAbstractIntVector) o; } o = castIntegerRecursive(o); - if (o instanceof RIntVector) { - return (RIntVector) o; + if (o instanceof RAbstractIntVector) { + return (RAbstractIntVector) o; } } throw error(RError.Message.CANNOT_COERCE_EXTERNAL_OBJECT_TO_VECTOR, "vector"); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java index 1d734075f1..17b784f1b1 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java @@ -32,17 +32,18 @@ import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.r.nodes.helpers.InheritsCheckNode; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; -import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.RRawVector; -import com.oracle.truffle.r.runtime.data.RStringVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.interop.ForeignArray2R; import com.oracle.truffle.r.runtime.ops.na.NAProfile; @@ -111,7 +112,7 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { } @Specialization - protected RLogicalVector doLogicalVector(RLogicalVector operand) { + protected RAbstractLogicalVector doLogicalVector(RAbstractLogicalVector operand) { return operand; } @@ -133,17 +134,17 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { } @Specialization - protected RLogicalVector doStringVector(RStringVector operand) { + protected RLogicalVector doStringVector(RAbstractStringVector operand) { return createResultVector(operand, index -> naCheck.convertStringToLogical(operand.getDataAt(index))); } @Specialization - protected RLogicalVector doComplexVector(RComplexVector operand) { + protected RLogicalVector doComplexVector(RAbstractComplexVector operand) { return createResultVector(operand, index -> naCheck.convertComplexToLogical(operand.getDataAt(index))); } @Specialization - protected RLogicalVector doRawVectorDims(RRawVector operand) { + protected RLogicalVector doRawVectorDims(RAbstractRawVector operand) { return createResultVector(operand, index -> RRuntime.raw2logical(operand.getRawDataAt(index))); } @@ -193,16 +194,16 @@ public abstract class CastLogicalNode extends CastLogicalBaseNode { } @Specialization(guards = "isForeignObject(obj)") - protected RLogicalVector doForeignObject(TruffleObject obj, + protected RAbstractLogicalVector doForeignObject(TruffleObject obj, @Cached("create()") ForeignArray2R foreignArray2R) { Object o = foreignArray2R.convert(obj); if (!RRuntime.isForeignObject(o)) { - if (o instanceof RLogicalVector) { - return (RLogicalVector) o; + if (o instanceof RAbstractLogicalVector) { + return (RAbstractLogicalVector) o; } o = castLogicalRecursive(o); if (o instanceof RLogicalVector) { - return (RLogicalVector) o; + return (RAbstractLogicalVector) o; } } throw error(RError.Message.CANNOT_COERCE_EXTERNAL_OBJECT_TO_VECTOR, "vector"); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java index 44b0149e20..541bb6d9a2 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java @@ -31,17 +31,18 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RDataFactory; -import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RRawVector; -import com.oracle.truffle.r.runtime.data.RStringVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.ops.na.NACheck; import com.oracle.truffle.r.runtime.ops.na.NAProfile; @@ -185,7 +186,7 @@ public abstract class CastRawNode extends CastBaseNode { } @Specialization - protected RRawVector doLogicalVector(RLogicalVector operand) { + protected RRawVector doLogicalVector(RAbstractLogicalVector operand) { byte[] bdata = new byte[operand.getLength()]; boolean warning = false; for (int i = 0; i < operand.getLength(); i++) { @@ -205,7 +206,7 @@ public abstract class CastRawNode extends CastBaseNode { } @Specialization - protected RRawVector doStringVector(RStringVector operand, + protected RRawVector doStringVector(RAbstractStringVector operand, @Cached("createBinaryProfile()") ConditionProfile emptyStringProfile, @Cached("create()") NAProfile naProfile) { naCheck.enable(operand); @@ -245,7 +246,7 @@ public abstract class CastRawNode extends CastBaseNode { } @Specialization - protected RRawVector doComplexVector(RComplexVector operand) { + protected RRawVector doComplexVector(RAbstractComplexVector operand) { byte[] bdata = new byte[operand.getLength()]; boolean imaginaryDiscardedWarning = false; boolean outOfRangeWarning = false; @@ -294,7 +295,7 @@ public abstract class CastRawNode extends CastBaseNode { } @Specialization - protected RRawVector doRawVector(RRawVector operand) { + protected RAbstractRawVector doRawVector(RAbstractRawVector operand) { return operand; } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java index b9406a1420..8210498a21 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java @@ -39,6 +39,7 @@ import com.oracle.truffle.r.runtime.data.RStringSequence; import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.RSymbol; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.interop.ForeignArray2R; @ImportStatic(RRuntime.class) @@ -76,12 +77,7 @@ public abstract class CastStringNode extends CastStringBaseNode { } @Specialization - protected RStringVector doStringVector(RStringVector vector) { - return vector; - } - - @Specialization - protected RStringSequence doStringSequence(RStringSequence vector) { + protected RAbstractStringVector doStringVector(RAbstractStringVector vector) { return vector; } @@ -90,7 +86,7 @@ public abstract class CastStringNode extends CastStringBaseNode { return RDataFactory.createStringSequence("", "", vector.getStart(), vector.getStride(), vector.getLength()); } - @Specialization(guards = "!isIntSequence(operandIn)") + @Specialization(guards = {"!isIntSequence(operandIn)", "!isRAbstractStringVector(operandIn)"}) protected RStringVector doAbstractContainer(RAbstractContainer operandIn, @Cached("createClassProfile()") ValueProfile operandProfile, @Cached("createBinaryProfile()") ConditionProfile isLanguageProfile) { @@ -109,16 +105,16 @@ public abstract class CastStringNode extends CastStringBaseNode { } @Specialization(guards = "isForeignObject(obj)") - protected RStringVector doForeignObject(TruffleObject obj, + protected RAbstractStringVector doForeignObject(TruffleObject obj, @Cached("create()") ForeignArray2R foreignArray2R) { Object o = foreignArray2R.convert(obj); if (!RRuntime.isForeignObject(o)) { - if (o instanceof RStringVector) { - return (RStringVector) o; + if (o instanceof RAbstractStringVector) { + return (RAbstractStringVector) o; } o = castStringRecursive(o); - if (o instanceof RStringVector) { - return (RStringVector) o; + if (o instanceof RAbstractStringVector) { + return (RAbstractStringVector) o; } } throw error(RError.Message.CANNOT_COERCE_EXTERNAL_OBJECT_TO_VECTOR, "vector"); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java index 8da573de72..12dd537fa2 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java @@ -41,6 +41,7 @@ import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RExpression; +import com.oracle.truffle.r.runtime.data.RForeignListWrapper; import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RInteropScalar; import com.oracle.truffle.r.runtime.data.RLanguage; @@ -53,6 +54,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector; import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractListVector; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; @@ -157,6 +159,16 @@ public abstract class PrecedenceNode extends RBaseNode { @Specialization(guards = "recursive") protected int doListRecursive(RList val, boolean recursive, @Cached("createRecursive()") PrecedenceNode precedenceNode) { + return doListRecursiveInternal(val, precedenceNode, recursive); + } + + @Specialization(guards = "recursive") + protected int doListRecursive(RForeignListWrapper val, boolean recursive, + @Cached("createRecursive()") PrecedenceNode precedenceNode) { + return doListRecursiveInternal(val, precedenceNode, recursive); + } + + private int doListRecursiveInternal(RAbstractListVector val, PrecedenceNode precedenceNode, boolean recursive) { int precedence = -1; for (int i = 0; i < val.getLength(); i++) { precedence = Math.max(precedence, precedenceNode.executeInteger(val.getDataAt(i), recursive)); @@ -184,6 +196,12 @@ public abstract class PrecedenceNode extends RBaseNode { return LIST_PRECEDENCE; } + @Specialization(guards = "!recursive") + @SuppressWarnings("unused") + protected int doList(RForeignListWrapper val, boolean recursive) { + return LIST_PRECEDENCE; + } + @Specialization(guards = "!recursive") @SuppressWarnings("unused") protected int doPairList(RPairList val, boolean recursive) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java index 7230d7b17e..aa040654c3 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java @@ -35,13 +35,13 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.RTypes; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; import com.oracle.truffle.r.runtime.interop.ForeignArray2R; @@ -318,7 +318,7 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode { } @Specialization(guards = "supportComplex") - protected RComplex doComplexVector(RComplexVector operand, boolean naRm, @SuppressWarnings("unused") boolean finite) { + protected RComplex doComplexVector(RAbstractComplexVector operand, boolean naRm, @SuppressWarnings("unused") boolean finite) { RBaseNode.reportWork(this, operand.getLength()); boolean profiledNaRm = naRmProfile.profile(naRm); RComplex result = RRuntime.double2complex(semantics.getDoubleStart()); @@ -348,7 +348,7 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode { // "largest" String for the implementation of max function @Specialization(guards = {"supportString", "operand.getLength() == 0"}) - protected String doStringVectorEmpty(@SuppressWarnings("unused") RStringVector operand, @SuppressWarnings("unused") boolean naRm, @SuppressWarnings("unused") boolean finite) { + protected String doStringVectorEmpty(@SuppressWarnings("unused") RAbstractStringVector operand, @SuppressWarnings("unused") boolean naRm, @SuppressWarnings("unused") boolean finite) { if (semantics.getEmptyWarning() != null) { warning(semantics.emptyWarningCharacter); } @@ -356,7 +356,7 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode { } @Specialization(guards = {"supportString", "operand.getLength() == 1"}) - protected String doStringVectorOneElem(RStringVector operand, boolean naRm, boolean finite) { + protected String doStringVectorOneElem(RAbstractStringVector operand, boolean naRm, boolean finite) { boolean profiledNaRm = naRmProfile.profile(naRm); String result = operand.getDataAt(0); if (profiledNaRm) { @@ -369,7 +369,7 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode { } @Specialization(guards = {"supportString", "operand.getLength() > 1"}) - protected String doStringVector(RStringVector operand, boolean naRm, boolean finite) { + protected String doStringVector(RAbstractStringVector operand, boolean naRm, boolean finite) { boolean profiledNaRm = naRmProfile.profile(naRm); na.enable(operand); int offset = 0; -- GitLab