diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java index ebd98fae25d107759455ac237a1670fb0236b499..52c05fa2eda814358fd124fc27d01cb885fcb343 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java @@ -47,6 +47,7 @@ import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RStringVector; 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; @@ -175,6 +176,22 @@ public abstract class Sprintf extends RBuiltinNode.Arg2 { return RDataFactory.createStringVector(r, RDataFactory.COMPLETE_VECTOR); } + @Specialization(guards = "fmtLengthOne(fmt)") + @TruffleBoundary + protected RStringVector sprintf(RAbstractStringVector fmt, RAbstractLogicalVector x) { + return sprintf(fmt.getDataAt(0), x); + } + + @Specialization + @TruffleBoundary + protected RStringVector sprintf(String fmt, RAbstractLogicalVector x) { + String[] r = new String[x.getLength()]; + for (int k = 0; k < r.length; k++) { + r[k] = format(fmt, x.getDataAt(k)); + } + return RDataFactory.createStringVector(r, RDataFactory.COMPLETE_VECTOR); + } + @Specialization(guards = "fmtLengthOne(fmt)") @TruffleBoundary protected RStringVector sprintf(RAbstractStringVector fmt, RAbstractStringVector x) {