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 43bffb637f5f30e311b4d1be0b663c15ddab6921..a689e54bdff5cc7a2d909f83521deb636a6679c4 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);