diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FFIWrapNode.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FFIWrapNode.java index 6c7e397ee82032a85b9aacb020447351289f4de8..2693615f508a0d1ff9bdfd3af494c667e2385d05 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FFIWrapNode.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FFIWrapNode.java @@ -36,6 +36,7 @@ import com.oracle.truffle.r.runtime.data.RLogical; import com.oracle.truffle.r.runtime.data.RObject; import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RScalarList; +import com.oracle.truffle.r.runtime.data.RScalarVector; import com.oracle.truffle.r.runtime.data.RSequence; public abstract class FFIWrapNode extends Node { @@ -92,7 +93,11 @@ public abstract class FFIWrapNode extends Node { return wrap(RDataFactory.createComplexVectorFromScalar(value)); } - @Specialization + protected static boolean isRScalarVector(RObject value) { + return value instanceof RScalarVector; + } + + @Specialization(guards = "!isRScalarVector(value)") protected static Object wrap(RObject value) { return value; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypes.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypes.java index f11da3d123650f52a9ed9c974c93284153ae10de..582b9366c70bc6a0cdd69ba8e82cba861b652241 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypes.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypes.java @@ -109,21 +109,11 @@ public class RTypes { return RDataFactory.createDoubleVectorFromScalar(value); } - @ImplicitCast - public static RAbstractContainer toAbstractContainer(RRaw value) { - return RDataFactory.createRawVectorFromScalar(value); - } - @ImplicitCast public static RAbstractContainer toAbstractContainer(byte value) { return RDataFactory.createLogicalVectorFromScalar(value); } - @ImplicitCast - public static RAbstractContainer toAbstractContainer(RComplex value) { - return RDataFactory.createComplexVectorFromScalar(value); - } - @ImplicitCast public static RAbstractContainer toAbstractContainer(String value) { return RDataFactory.createStringVectorFromScalar(value); @@ -139,21 +129,11 @@ public class RTypes { return RDataFactory.createDoubleVectorFromScalar(value); } - @ImplicitCast - public static RAbstractVector toAbstractVector(RRaw value) { - return RDataFactory.createRawVectorFromScalar(value); - } - @ImplicitCast public static RAbstractVector toAbstractVector(byte value) { return RDataFactory.createLogicalVectorFromScalar(value); } - @ImplicitCast - public static RAbstractVector toAbstractVector(RComplex value) { - return RDataFactory.createComplexVectorFromScalar(value); - } - @ImplicitCast public static RAbstractVector toAbstractVector(String value) { return RDataFactory.createStringVectorFromScalar(value); @@ -169,21 +149,11 @@ public class RTypes { return RDataFactory.createDoubleVectorFromScalar(value); } - @ImplicitCast - public static RAbstractComplexVector toAbstractComplexVector(RComplex vector) { - return RDataFactory.createComplexVectorFromScalar(vector); - } - @ImplicitCast public static RAbstractLogicalVector toAbstractLogicalVector(byte vector) { return RDataFactory.createLogicalVectorFromScalar(vector); } - @ImplicitCast - public static RAbstractRawVector toAbstractRawVector(RRaw vector) { - return RDataFactory.createRawVectorFromScalar(vector); - } - @ImplicitCast public static RAbstractStringVector toAbstractStringVector(String vector) { return RDataFactory.createStringVectorFromScalar(vector); @@ -199,21 +169,11 @@ public class RTypes { return RDataFactory.createDoubleVectorFromScalar(value); } - @ImplicitCast - public static RAbstractAtomicVector toAbstractAtomicVector(RRaw value) { - return RDataFactory.createRawVectorFromScalar(value); - } - @ImplicitCast public static RAbstractAtomicVector toAbstractAtomicVector(byte value) { return RDataFactory.createLogicalVectorFromScalar(value); } - @ImplicitCast - public static RAbstractAtomicVector toAbstractAtomicVector(RComplex value) { - return RDataFactory.createComplexVectorFromScalar(value); - } - @ImplicitCast public static RAbstractAtomicVector toAbstractAtomicVector(String value) { return RDataFactory.createStringVectorFromScalar(value);