From 874986d19b0b3ecac9488c06c3817a15cf702367 Mon Sep 17 00:00:00 2001
From: Tomas Zezula <tomas.zezula@oracle.com>
Date: Wed, 18 Apr 2018 11:46:42 +0200
Subject: [PATCH] [GR-9410] TCK tests failing due to attempt to unbox
 RComplexVector.

---
 .../interop/RAbstractVectorAccessFactory.java    | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
index 0628f9d52f..349586e1f3 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
@@ -325,11 +325,25 @@ public final class RAbstractVectorAccessFactory implements StandardFactory {
             @Override
             public Object execute(VirtualFrame frame) {
                 RAbstractVector arg = (RAbstractVector) ForeignAccess.getReceiver(frame);
-                return arg.getLength() == 1;
+                return arg.getLength() == 1 && isUnBoxable(arg);
             }
         });
     }
 
+    private static boolean isUnBoxable(RAbstractVector vector) {
+        Object o = vector.getDataAtAsObject(0);
+        return isPrimitive(o);
+    }
+
+    private static boolean isPrimitive(Object element) {
+        if (element == null) {
+            return false;
+        }
+        final Class<?> elementType = element.getClass();
+        return elementType == String.class || elementType == Character.class || elementType == Boolean.class || elementType == Byte.class || elementType == Short.class ||
+                        elementType == Integer.class || elementType == Long.class || elementType == Float.class || elementType == Double.class;
+    }
+
     @Override
     public CallTarget accessHasSize() {
         return Truffle.getRuntime().createCallTarget(new InteropRootNode() {
-- 
GitLab