Skip to content
Snippets Groups Projects
Commit 1ce507c4 authored by Tomas Zezula's avatar Tomas Zezula
Browse files

[GR-9535] Broken RComplex interop.

parent b3d1ef84
No related branches found
No related tags found
No related merge requests found
...@@ -56,6 +56,9 @@ import com.oracle.truffle.r.runtime.RRuntime; ...@@ -56,6 +56,9 @@ import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.RLogical; import com.oracle.truffle.r.runtime.data.RLogical;
import com.oracle.truffle.r.runtime.data.RObject; import com.oracle.truffle.r.runtime.data.RObject;
import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RRaw;
import com.oracle.truffle.r.runtime.data.RScalar;
import com.oracle.truffle.r.runtime.data.RString;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector; import com.oracle.truffle.r.runtime.data.model.RAbstractRawVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
...@@ -452,4 +455,23 @@ public final class RAbstractVectorAccessFactory implements StandardFactory { ...@@ -452,4 +455,23 @@ public final class RAbstractVectorAccessFactory implements StandardFactory {
} }
}); });
} }
static class Check extends RootNode {
Check() {
super(null);
}
@Override
public Object execute(VirtualFrame frame) {
final Object receiver = ForeignAccess.getReceiver(frame);
// TODO: RLogical has no ForeignAccess, issue: GR-9536, use RAbstractVectorAccessFactory
// for compatibility.
final boolean logical = receiver.getClass() == RLogical.class;
// TODO: RString has no ForeignAccess, issue: GR-9536, use RAbstractVectorAccessFactory
// for compatibility.
final boolean string = receiver.getClass() == RString.class;
return receiver instanceof RAbstractAtomicVector && (!(receiver instanceof RScalar) || logical || string);
}
}
} }
...@@ -113,7 +113,7 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory { ...@@ -113,7 +113,7 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory {
} else if (obj instanceof REmpty) { } else if (obj instanceof REmpty) {
return REmptyMRForeign.ACCESS; return REmptyMRForeign.ACCESS;
} else if (obj instanceof RAbstractAtomicVector) { } else if (obj instanceof RAbstractAtomicVector) {
return ForeignAccess.create(RAbstractAtomicVector.class, new RAbstractVectorAccessFactory()); return ForeignAccess.create(new RAbstractVectorAccessFactory(), new RAbstractVectorAccessFactory.Check());
} else { } else {
ForeignAccess access = FFI_RForeignAccessFactoryImpl.getForeignAccess(obj); ForeignAccess access = FFI_RForeignAccessFactoryImpl.getForeignAccess(obj);
if (access != null) { if (access != null) {
......
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