Skip to content
Snippets Groups Projects
Commit 42a95534 authored by Tomas Stupka's avatar Tomas Stupka
Browse files

multi-dim arrays not yet supported with ForeignWrappers

parent 5c688a60
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment