Skip to content
Snippets Groups Projects
Commit 48962dd8 authored by Lukas Stadler's avatar Lukas Stadler Committed by stepan
Browse files

extends MR classes with IS_POINTER/AS_POINTER, MR for RExpression

parent e2413701
No related branches found
No related tags found
No related merge requests found
Showing
with 390 additions and 2 deletions
...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution; ...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.env.frame.ActiveBinding; import com.oracle.truffle.r.runtime.env.frame.ActiveBinding;
@MessageResolution(receiverType = ActiveBinding.class) @MessageResolution(receiverType = ActiveBinding.class)
...@@ -53,6 +54,20 @@ public class ActiveBindingMR { ...@@ -53,6 +54,20 @@ public class ActiveBindingMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class ActiveBindingCheck extends Node { public abstract static class ActiveBindingCheck extends Node {
......
...@@ -45,6 +45,8 @@ import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode; ...@@ -45,6 +45,8 @@ import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
import com.oracle.truffle.r.nodes.access.vector.ReplaceVectorNode; import com.oracle.truffle.r.nodes.access.vector.ReplaceVectorNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode; import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.control.RLengthNode; import com.oracle.truffle.r.nodes.control.RLengthNode;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RExpression;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RList;
import com.oracle.truffle.r.runtime.data.RLogical; import com.oracle.truffle.r.runtime.data.RLogical;
...@@ -122,6 +124,20 @@ public class ListMR { ...@@ -122,6 +124,20 @@ public class ListMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RListCheck extends Node { public abstract static class RListCheck extends Node {
...@@ -131,6 +147,104 @@ public class ListMR { ...@@ -131,6 +147,104 @@ public class ListMR {
} }
} }
@MessageResolution(receiverType = RExpression.class)
public static class RExpressionMR extends ListMR {
@Resolve(message = "IS_BOXED")
public abstract static class RExpressionIsBoxedNode extends Node {
protected Object access(RExpression receiver) {
return isBoxed(receiver);
}
}
@Resolve(message = "HAS_SIZE")
public abstract static class RExpressionHasSizeNode extends Node {
protected Object access(RExpression receiver) {
return hasSize(receiver);
}
}
@Resolve(message = "GET_SIZE")
public abstract static class RExpressionGetSizeNode extends Node {
@Child private RLengthNode lengthNode = RLengthNode.create();
protected Object access(RExpression receiver) {
return getSize(receiver, lengthNode);
}
}
@Resolve(message = "IS_NULL")
public abstract static class RExpressionIsNullNode extends Node {
protected Object access(RExpression receiver) {
return isNull(receiver);
}
}
@Resolve(message = "READ")
public abstract static class RExpressionReadNode extends Node {
@Child private ListReadImplNode read = ListReadImplNodeGen.create();
protected Object access(VirtualFrame frame, RExpression receiver, Object identifier) {
return read.execute(frame, receiver, identifier);
}
}
@Resolve(message = "WRITE")
public abstract static class RExpressionWriteNode extends Node {
@Child private ListWriteImplNode writeNode = ListWriteImplNodeGen.create();
protected Object access(RExpression receiver, Object identifier, Object valueObj) {
return writeNode.execute(receiver, identifier, valueObj);
}
}
@Resolve(message = "KEYS")
public abstract static class RExpressionKeysNode extends Node {
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
protected Object access(RExpression receiver) {
return listKeys(receiver, getNamesNode);
}
}
@Resolve(message = "KEY_INFO")
public abstract static class RExpressionKeyInfoNode extends Node {
@Child private ListKeyInfoImplNode keyInfoNode = ListKeyInfoImplNodeGen.create();
protected Object access(TruffleObject receiver, Object idx) {
return keyInfoNode.execute(receiver, idx);
}
}
@Resolve(message = "TO_NATIVE")
public abstract static class RExpressionToNativeNode extends Node {
protected Object access(RTruffleObject receiver) {
return toNativePointer(receiver);
}
}
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve
public abstract static class RExpressionCheck extends Node {
protected static boolean test(TruffleObject receiver) {
return receiver instanceof RExpression;
}
}
}
@MessageResolution(receiverType = RPairList.class) @MessageResolution(receiverType = RPairList.class)
public static class RPairListMR { public static class RPairListMR {
...@@ -200,6 +314,20 @@ public class ListMR { ...@@ -200,6 +314,20 @@ public class ListMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RPairListCheck extends Node { public abstract static class RPairListCheck extends Node {
protected static boolean test(TruffleObject receiver) { protected static boolean test(TruffleObject receiver) {
......
...@@ -36,6 +36,7 @@ import com.oracle.truffle.api.profiles.ConditionProfile; ...@@ -36,6 +36,7 @@ import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.engine.interop.RArgsValuesAndNamesMRFactory.RArgsValuesAndNamesKeyInfoImplNodeGen; import com.oracle.truffle.r.engine.interop.RArgsValuesAndNamesMRFactory.RArgsValuesAndNamesKeyInfoImplNodeGen;
import com.oracle.truffle.r.engine.interop.RArgsValuesAndNamesMRFactory.RArgsValuesAndNamesReadImplNodeGen; import com.oracle.truffle.r.engine.interop.RArgsValuesAndNamesMRFactory.RArgsValuesAndNamesReadImplNodeGen;
import com.oracle.truffle.r.runtime.ArgumentsSignature; import com.oracle.truffle.r.runtime.ArgumentsSignature;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
...@@ -89,6 +90,20 @@ public class RArgsValuesAndNamesMR { ...@@ -89,6 +90,20 @@ public class RArgsValuesAndNamesMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RArgsValuesAndNamesCheck extends Node { public abstract static class RArgsValuesAndNamesCheck extends Node {
......
...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve; ...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.conn.RConnection; import com.oracle.truffle.r.runtime.conn.RConnection;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
@MessageResolution(receiverType = RConnection.class) @MessageResolution(receiverType = RConnection.class)
public class RConnectionMR { public class RConnectionMR {
...@@ -39,6 +40,20 @@ public class RConnectionMR { ...@@ -39,6 +40,20 @@ public class RConnectionMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RConnection extends Node { public abstract static class RConnection extends Node {
......
...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution; ...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.REmpty; import com.oracle.truffle.r.runtime.data.REmpty;
@MessageResolution(receiverType = REmpty.class) @MessageResolution(receiverType = REmpty.class)
...@@ -39,6 +40,20 @@ public class REmptyMR { ...@@ -39,6 +40,20 @@ public class REmptyMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class REmptyCheck extends Node { public abstract static class REmptyCheck extends Node {
......
...@@ -45,6 +45,7 @@ import com.oracle.truffle.r.ffi.impl.interop.NativePointer; ...@@ -45,6 +45,7 @@ import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode; import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode;
import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode; import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
import com.oracle.truffle.r.nodes.access.vector.ReplaceVectorNode; import com.oracle.truffle.r.nodes.access.vector.ReplaceVectorNode;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.env.REnvironment; import com.oracle.truffle.r.runtime.env.REnvironment;
import com.oracle.truffle.r.runtime.interop.Foreign2R; import com.oracle.truffle.r.runtime.interop.Foreign2R;
...@@ -97,6 +98,20 @@ public class REnvironmentMR { ...@@ -97,6 +98,20 @@ public class REnvironmentMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class REnvironmentCheck extends Node { public abstract static class REnvironmentCheck extends Node {
......
...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution; ...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RExternalPtr; import com.oracle.truffle.r.runtime.data.RExternalPtr;
@MessageResolution(receiverType = RExternalPtr.class) @MessageResolution(receiverType = RExternalPtr.class)
...@@ -39,6 +40,20 @@ public class RExternalPtrMR { ...@@ -39,6 +40,20 @@ public class RExternalPtrMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RExternalPtrCheck extends Node { public abstract static class RExternalPtrCheck extends Node {
......
...@@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.context.RForeignAccessFactory; ...@@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.context.RForeignAccessFactory;
import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
import com.oracle.truffle.r.runtime.data.RDouble; import com.oracle.truffle.r.runtime.data.RDouble;
import com.oracle.truffle.r.runtime.data.REmpty; import com.oracle.truffle.r.runtime.data.REmpty;
import com.oracle.truffle.r.runtime.data.RExpression;
import com.oracle.truffle.r.runtime.data.RExternalPtr; import com.oracle.truffle.r.runtime.data.RExternalPtr;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.data.RInteger; import com.oracle.truffle.r.runtime.data.RInteger;
...@@ -73,6 +74,8 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory { ...@@ -73,6 +74,8 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory {
return RNullMRForeign.ACCESS; return RNullMRForeign.ACCESS;
} else if (obj instanceof RList) { } else if (obj instanceof RList) {
return RListMRForeign.ACCESS; return RListMRForeign.ACCESS;
} else if (obj instanceof RExpression) {
return RExpressionMRForeign.ACCESS;
} else if (obj instanceof REnvironment) { } else if (obj instanceof REnvironment) {
return REnvironmentMRForeign.ACCESS; return REnvironmentMRForeign.ACCESS;
} else if (obj instanceof RPairList) { } else if (obj instanceof RPairList) {
......
...@@ -37,6 +37,7 @@ import com.oracle.truffle.r.nodes.function.RCallBaseNode; ...@@ -37,6 +37,7 @@ import com.oracle.truffle.r.nodes.function.RCallBaseNode;
import com.oracle.truffle.r.nodes.function.RCallNode; import com.oracle.truffle.r.nodes.function.RCallNode;
import com.oracle.truffle.r.runtime.ArgumentsSignature; import com.oracle.truffle.r.runtime.ArgumentsSignature;
import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.RArguments;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor; import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
...@@ -104,6 +105,20 @@ public class RFunctionMR { ...@@ -104,6 +105,20 @@ public class RFunctionMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RFunctionCheck extends Node { public abstract static class RFunctionCheck extends Node {
......
...@@ -38,6 +38,7 @@ import com.oracle.truffle.api.profiles.ConditionProfile; ...@@ -38,6 +38,7 @@ import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.ffi.impl.interop.NativePointer; import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode; import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode;
import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode; import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RLanguage; import com.oracle.truffle.r.runtime.data.RLanguage;
import com.oracle.truffle.r.runtime.data.RLogical; import com.oracle.truffle.r.runtime.data.RLogical;
import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RNull;
...@@ -86,6 +87,20 @@ public class RLanguageMR { ...@@ -86,6 +87,20 @@ public class RLanguageMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RLanguageCheck extends Node { public abstract static class RLanguageCheck extends Node {
......
...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution; ...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RMissing;
@MessageResolution(receiverType = RMissing.class) @MessageResolution(receiverType = RMissing.class)
...@@ -39,6 +40,20 @@ public class RMissingMR { ...@@ -39,6 +40,20 @@ public class RMissingMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RMissingCheck extends Node { public abstract static class RMissingCheck extends Node {
......
...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve; ...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.ffi.impl.interop.NativePointer; import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RNull;
@MessageResolution(receiverType = RNull.class) @MessageResolution(receiverType = RNull.class)
...@@ -58,6 +59,20 @@ public class RNullMR { ...@@ -58,6 +59,20 @@ public class RNullMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RNullCheck extends Node { public abstract static class RNullCheck extends Node {
......
...@@ -39,6 +39,7 @@ import com.oracle.truffle.r.engine.interop.RPromiseMRFactory.RPromiseWriteImplNo ...@@ -39,6 +39,7 @@ import com.oracle.truffle.r.engine.interop.RPromiseMRFactory.RPromiseWriteImplNo
import com.oracle.truffle.r.ffi.impl.interop.NativePointer; import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
import com.oracle.truffle.r.nodes.function.PromiseHelperNode; import com.oracle.truffle.r.nodes.function.PromiseHelperNode;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RPromise; import com.oracle.truffle.r.runtime.data.RPromise;
...@@ -93,6 +94,20 @@ public class RPromiseMR { ...@@ -93,6 +94,20 @@ public class RPromiseMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RPromiseCheck extends Node { public abstract static class RPromiseCheck extends Node {
......
...@@ -44,6 +44,7 @@ import com.oracle.truffle.r.nodes.attributes.ArrayAttributeNode; ...@@ -44,6 +44,7 @@ import com.oracle.truffle.r.nodes.attributes.ArrayAttributeNode;
import com.oracle.truffle.r.nodes.attributes.GetAttributeNode; import com.oracle.truffle.r.nodes.attributes.GetAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SetAttributeNode; import com.oracle.truffle.r.nodes.attributes.SetAttributeNode;
import com.oracle.truffle.r.runtime.data.RAttributesLayout.RAttribute; import com.oracle.truffle.r.runtime.data.RAttributesLayout.RAttribute;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RNull;
...@@ -102,6 +103,20 @@ public class RS4ObjectMR { ...@@ -102,6 +103,20 @@ public class RS4ObjectMR {
return RDataFactory.createStringVector(data, RDataFactory.COMPLETE_VECTOR); return RDataFactory.createStringVector(data, RDataFactory.COMPLETE_VECTOR);
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RS4ObjectCheck extends Node { public abstract static class RS4ObjectCheck extends Node {
protected static boolean test(TruffleObject receiver) { protected static boolean test(TruffleObject receiver) {
......
...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve; ...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.ffi.impl.interop.NativePointer; import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RSymbol; import com.oracle.truffle.r.runtime.data.RSymbol;
@MessageResolution(receiverType = RSymbol.class) @MessageResolution(receiverType = RSymbol.class)
...@@ -47,6 +48,20 @@ public class RSymbolMR { ...@@ -47,6 +48,20 @@ public class RSymbolMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RSymbolCheck extends Node { public abstract static class RSymbolCheck extends Node {
......
...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution; ...@@ -27,6 +27,7 @@ import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve; import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.data.RUnboundValue; import com.oracle.truffle.r.runtime.data.RUnboundValue;
@MessageResolution(receiverType = RUnboundValue.class) @MessageResolution(receiverType = RUnboundValue.class)
...@@ -39,6 +40,20 @@ public class RUnboundValueMR { ...@@ -39,6 +40,20 @@ public class RUnboundValueMR {
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class RUnboundValueCheck extends Node { public abstract static class RUnboundValueCheck extends Node {
......
...@@ -24,12 +24,29 @@ package com.oracle.truffle.r.ffi.impl.interop; ...@@ -24,12 +24,29 @@ package com.oracle.truffle.r.ffi.impl.interop;
import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.CanResolve;
import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper; import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
@MessageResolution(receiverType = CharSXPWrapper.class) @MessageResolution(receiverType = CharSXPWrapper.class)
public class CharSXPWrapperMR { public class CharSXPWrapperMR {
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
@CanResolve @CanResolve
public abstract static class CharSXPWrapperCheck extends Node { public abstract static class CharSXPWrapperCheck extends Node {
......
...@@ -24,17 +24,32 @@ package com.oracle.truffle.r.ffi.impl.interop; ...@@ -24,17 +24,32 @@ package com.oracle.truffle.r.ffi.impl.interop;
import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.CanResolve;
import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.ffi.DLL; import com.oracle.truffle.r.runtime.ffi.DLL;
@MessageResolution(receiverType = DLL.DotSymbol.class) @MessageResolution(receiverType = DLL.DotSymbol.class)
public class DLLDotSymbolMR { public class DLLDotSymbolMR {
@CanResolve @CanResolve
public abstract static class DotSymbolCheck extends Node { public abstract static class DotSymbolCheck extends Node {
protected static boolean test(TruffleObject receiver) { protected static boolean test(TruffleObject receiver) {
return receiver instanceof DLL.DotSymbol; return receiver instanceof DLL.DotSymbol;
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
} }
...@@ -24,8 +24,10 @@ package com.oracle.truffle.r.ffi.impl.interop; ...@@ -24,8 +24,10 @@ package com.oracle.truffle.r.ffi.impl.interop;
import com.oracle.truffle.api.interop.CanResolve; import com.oracle.truffle.api.interop.CanResolve;
import com.oracle.truffle.api.interop.MessageResolution; import com.oracle.truffle.api.interop.MessageResolution;
import com.oracle.truffle.api.interop.Resolve;
import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.NativeDataAccess;
import com.oracle.truffle.r.runtime.ffi.DLL; import com.oracle.truffle.r.runtime.ffi.DLL;
@MessageResolution(receiverType = DLL.DLLInfo.class) @MessageResolution(receiverType = DLL.DLLInfo.class)
...@@ -37,4 +39,18 @@ public class DLLInfoMR { ...@@ -37,4 +39,18 @@ public class DLLInfoMR {
return receiver instanceof DLL.DLLInfo; return receiver instanceof DLL.DLLInfo;
} }
} }
@Resolve(message = "IS_POINTER")
public abstract static class IsPointerNode extends Node {
protected boolean access(Object receiver) {
return NativeDataAccess.isPointer(receiver);
}
}
@Resolve(message = "AS_POINTER")
public abstract static class AsPointerNode extends Node {
protected long access(Object receiver) {
return NativeDataAccess.asPointer(receiver);
}
}
} }
...@@ -115,7 +115,6 @@ public enum NativeFunction { ...@@ -115,7 +115,6 @@ public enum NativeFunction {
if (function == null) { if (function == null) {
CompilerDirectives.transferToInterpreterAndInvalidate(); CompilerDirectives.transferToInterpreterAndInvalidate();
function = lookup.apply(callName, signature); function = lookup.apply(callName, signature);
System.out.println("lookup " + callName);
} }
return function; return function;
} }
......
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