diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/DotC.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/DotC.java index 120de0517904d688916a78516fa75d439aba16c2..f2556396ba8ca085fb7b1275cf2d3fbbb1166917 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/DotC.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/DotC.java @@ -162,19 +162,21 @@ public abstract class DotC extends RBuiltinNode { case SCALAR_LOGICAL: results[i] = RDataFactory.createLogicalVector((byte[]) nativeArgs[i], RDataFactory.COMPLETE_VECTOR); break; - case VECTOR_DOUBLE: { + case VECTOR_DOUBLE: results[i] = ((RAbstractDoubleVector) argValues[i]).materialize().copyResetData((double[]) nativeArgs[i]); break; - } - case VECTOR_INT: { + case VECTOR_INT: results[i] = ((RAbstractIntVector) argValues[i]).materialize().copyResetData((int[]) nativeArgs[i]); break; - } case VECTOR_LOGICAL: { - results[i] = ((RAbstractLogicalVector) argValues[i]).materialize().copyResetData((byte[]) nativeArgs[i]); + int[] intData = (int[]) nativeArgs[i]; + byte[] byteData = new byte[intData.length]; + for (int j = 0; j < intData.length; j++) { + byteData[j] = RRuntime.isNA(intData[j]) ? RRuntime.LOGICAL_NA : RRuntime.asLogical(intData[j] != 0); + } + results[i] = ((RAbstractLogicalVector) argValues[i]).materialize().copyResetData(byteData); break; } - } } return RDataFactory.createList(results, listNames);