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;
import com.oracle.truffle.r.runtime.data.RLogical;
import com.oracle.truffle.r.runtime.data.RObject;
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.RAbstractRawVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
......@@ -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 {
} else if (obj instanceof REmpty) {
return REmptyMRForeign.ACCESS;
} else if (obj instanceof RAbstractAtomicVector) {
return ForeignAccess.create(RAbstractAtomicVector.class, new RAbstractVectorAccessFactory());
return ForeignAccess.create(new RAbstractVectorAccessFactory(), new RAbstractVectorAccessFactory.Check());
} else {
ForeignAccess access = FFI_RForeignAccessFactoryImpl.getForeignAccess(obj);
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