From 42a95534daafebc9fa2fd7d91170549c73339624 Mon Sep 17 00:00:00 2001
From: Tomas Stupka <tomas.stupka@oracle.com>
Date: Fri, 12 Jan 2018 15:51:08 +0100
Subject: [PATCH] multi-dim arrays not yet supported with ForeignWrappers

---
 .../r/runtime/interop/ForeignArray2R.java     | 66 +++++++++----------
 1 file changed, 32 insertions(+), 34 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
index 43bffb637f..a689e54bdf 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
@@ -99,45 +99,43 @@ public abstract class ForeignArray2R extends RBaseNode {
      *
      */
     public Object convert(Object obj, boolean recursive) {
-        if (FastROptions.ForeignObjectWrappers.getBooleanValue()) {
-            if (isForeignArray(obj)) {
-                TruffleObject truffleObject = (TruffleObject) obj;
-                try {
-                    int size = (int) ForeignAccess.sendGetSize(getSize, truffleObject);
-                    if (size == 0) {
-                        return new RForeignListWrapper(truffleObject);
-                    } else {
-                        Object firstElement = ForeignAccess.sendRead(read, truffleObject, 0);
-                        switch (InteropTypeCheck.determineType(firstElement)) {
-                            case BOOLEAN:
-                                return new RForeignBooleanWrapper(truffleObject);
-                            case DOUBLE:
-                                return new RForeignDoubleWrapper(truffleObject);
-                            case INTEGER:
-                                return new RForeignIntWrapper(truffleObject);
-                            case STRING:
-                                return new RForeignStringWrapper(truffleObject);
-                            default:
-                                return new RForeignListWrapper(truffleObject);
-                        }
+        if (FastROptions.ForeignObjectWrappers.getBooleanValue() && isForeignArray(obj)) {
+            TruffleObject truffleObject = (TruffleObject) obj;
+            try {
+                int size = (int) ForeignAccess.sendGetSize(getSize, truffleObject);
+                if (size == 0) {
+                    return new RForeignListWrapper(truffleObject);
+                } else {
+                    Object firstElement = ForeignAccess.sendRead(read, truffleObject, 0);
+                    if (isForeignArray(firstElement)) {
+                        throw error(RError.Message.GENERIC, "Wrapping of multi-dim arrays not supported.");
+                    }
+                    switch (InteropTypeCheck.determineType(firstElement)) {
+                        case BOOLEAN:
+                            return new RForeignBooleanWrapper(truffleObject);
+                        case DOUBLE:
+                            return new RForeignDoubleWrapper(truffleObject);
+                        case INTEGER:
+                            return new RForeignIntWrapper(truffleObject);
+                        case STRING:
+                            return new RForeignStringWrapper(truffleObject);
+                        default:
+                            return new RForeignListWrapper(truffleObject);
                     }
-                } catch (UnsupportedMessageException | UnknownIdentifierException e) {
-                    throw RInternalError.shouldNotReachHere(e);
                 }
-            } else {
-                return obj;
+            } catch (UnsupportedMessageException | UnknownIdentifierException e) {
+                throw RInternalError.shouldNotReachHere(e);
             }
-        } else {
-            Object result = execute(obj, recursive, null, 0);
-            if (result instanceof ForeignArrayData) {
-                ForeignArrayData arrayData = (ForeignArrayData) result;
-                if (arrayData.elements.isEmpty()) {
-                    return RDataFactory.createList();
-                }
-                return asAbstractVector(arrayData);
+        }
+        Object result = execute(obj, recursive, null, 0);
+        if (result instanceof ForeignArrayData) {
+            ForeignArrayData arrayData = (ForeignArrayData) result;
+            if (arrayData.elements.isEmpty()) {
+                return RDataFactory.createList();
             }
-            return result;
+            return asAbstractVector(arrayData);
         }
+        return result;
     }
 
     protected abstract Object execute(Object obj, boolean recursive, ForeignArrayData arrayData, int depth);
-- 
GitLab