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 ebec5af6e485d4e7016ec3162bad1b624eaaeb59..26dcb968171e8680503e5ad8ad58a693f33f6373 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 @@ -33,7 +33,9 @@ import com.oracle.truffle.r.runtime.RDeparse; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.data.RDataFactory; +import com.oracle.truffle.r.runtime.data.RIntSequence; import com.oracle.truffle.r.runtime.data.RLanguage; +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; @@ -70,12 +72,21 @@ public abstract class CastStringNode extends CastStringBaseNode { return ret; } + protected boolean isIntSequence(RAbstractContainer c) { + return c instanceof RIntSequence; + } + @Specialization protected RStringVector doStringVector(RStringVector vector) { return vector; } @Specialization + protected RStringSequence doStringVector(RIntSequence vector) { + return RDataFactory.createStringSequence("", "", vector.getStart(), vector.getStride(), vector.getLength()); + } + + @Specialization(guards = "!isIntSequence(operandIn)") protected RStringVector doAbstractContainer(RAbstractContainer operandIn, @Cached("createClassProfile()") ValueProfile operandProfile, @Cached("createBinaryProfile()") ConditionProfile isLanguageProfile) {