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