From 3426212c8ec2b2889ae9992f27241bbf037720ce Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Mon, 9 Nov 2015 12:13:00 +0100 Subject: [PATCH] handle logical parameters in .C correctly --- .../truffle/r/nodes/builtin/base/foreign/DotC.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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 120de05179..f2556396ba 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); -- GitLab