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