Skip to content

Commit 74fb7fc

Browse files
committed
Use 'IsPointerNode' in 'AsPythonNode' as well.
1 parent 1c719da commit 74fb7fc

File tree

5 files changed

+44
-37
lines changed

5 files changed

+44
-37
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/CArrayWrapperMR.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import com.oracle.graal.python.builtins.objects.cext.CArrayWrappers.CStringWrapper;
4747
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.CExtBaseNode;
4848
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.InvalidateNativeObjectsAllManagedNode;
49-
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.PIsPointerNode;
5049
import com.oracle.graal.python.builtins.objects.ints.PInt;
5150
import com.oracle.graal.python.nodes.SpecialMethodNames;
5251
import com.oracle.truffle.api.CompilerDirectives;
@@ -161,7 +160,7 @@ int access(CByteArrayWrapper obj) {
161160

162161
@Resolve(message = "IS_POINTER")
163162
abstract static class IsPointerNode extends Node {
164-
@Child private PIsPointerNode pIsPointerNode = PIsPointerNode.create();
163+
@Child private CExtNodes.IsPointerNode pIsPointerNode = CExtNodes.IsPointerNode.create();
165164

166165
boolean access(CArrayWrapper obj) {
167166
return pIsPointerNode.execute(obj);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/CExtNodes.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.CextUpcallNodeGen;
5757
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.DirectUpcallNodeGen;
5858
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.GetNativeClassNodeGen;
59+
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.IsPointerNodeGen;
5960
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.MaterializeDelegateNodeGen;
6061
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.ObjectUpcallNodeGen;
6162
import com.oracle.graal.python.builtins.objects.cext.CExtNodesFactory.ToJavaNodeGen;
@@ -105,6 +106,7 @@
105106
import com.oracle.graal.python.runtime.exception.PException;
106107
import com.oracle.graal.python.runtime.exception.PythonErrorType;
107108
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
109+
import com.oracle.truffle.api.Assumption;
108110
import com.oracle.truffle.api.CompilerDirectives;
109111
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
110112
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -377,6 +379,7 @@ public static ToSulongNode create() {
377379
*/
378380
public abstract static class AsPythonObjectNode extends CExtBaseNode {
379381
@Child private MaterializeDelegateNode materializeNode;
382+
@Child private IsPointerNode isPointerNode;
380383

381384
public abstract Object execute(Object value);
382385

@@ -385,27 +388,27 @@ boolean doBoolNativeWrapper(BoolNativeWrapper object) {
385388
return object.getValue();
386389
}
387390

388-
@Specialization(guards = "!object.isNative()")
391+
@Specialization(guards = "!isNative(object)")
389392
byte doByteNativeWrapper(ByteNativeWrapper object) {
390393
return object.getValue();
391394
}
392395

393-
@Specialization(guards = "!object.isNative()")
396+
@Specialization(guards = "!isNative(object)")
394397
int doIntNativeWrapper(IntNativeWrapper object) {
395398
return object.getValue();
396399
}
397400

398-
@Specialization(guards = "!object.isNative()")
401+
@Specialization(guards = "!isNative(object)")
399402
long doLongNativeWrapper(LongNativeWrapper object) {
400403
return object.getValue();
401404
}
402405

403-
@Specialization(guards = "!object.isNative()")
406+
@Specialization(guards = "!isNative(object)")
404407
double doDoubleNativeWrapper(DoubleNativeWrapper object) {
405408
return object.getValue();
406409
}
407410

408-
@Specialization(guards = {"!isBoolNativeWrapper(object)", "object.isNative()"})
411+
@Specialization(guards = {"!isBoolNativeWrapper(object)", "isNative(object)"})
409412
Object doPrimitiveNativeWrapper(PrimitiveNativeWrapper object) {
410413
return getMaterializeNode().execute(object);
411414
}
@@ -467,6 +470,14 @@ Object run(Object obj) {
467470
throw raise(PythonErrorType.SystemError, "invalid object from native: %s", obj);
468471
}
469472

473+
protected boolean isNative(PythonNativeWrapper object) {
474+
if (isPointerNode == null) {
475+
CompilerDirectives.transferToInterpreterAndInvalidate();
476+
isPointerNode = insert(IsPointerNode.create());
477+
}
478+
return isPointerNode.execute(object);
479+
}
480+
470481
protected static boolean isPrimitiveNativeWrapper(PythonNativeWrapper object) {
471482
return object instanceof PrimitiveNativeWrapper;
472483
}
@@ -1456,4 +1467,27 @@ protected ReadArgumentNode[] getArguments() {
14561467
throw new IllegalAccessError();
14571468
}
14581469
}
1470+
1471+
public abstract static class IsPointerNode extends PNodeWithContext {
1472+
1473+
public abstract boolean execute(PythonNativeWrapper obj);
1474+
1475+
@Specialization(assumptions = {"singleContextAssumption()", "nativeObjectsAllManagedAssumption()"})
1476+
boolean doFalse(@SuppressWarnings("unused") PythonNativeWrapper obj) {
1477+
return false;
1478+
}
1479+
1480+
@Specialization
1481+
boolean doGeneric(PythonNativeWrapper obj) {
1482+
return obj.isNative();
1483+
}
1484+
1485+
protected Assumption nativeObjectsAllManagedAssumption() {
1486+
return getContext().getNativeObjectsAllManagedAssumption();
1487+
}
1488+
1489+
public static IsPointerNode create() {
1490+
return IsPointerNodeGen.create();
1491+
}
1492+
}
14591493
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PySequenceArrayWrapperMR.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,9 @@
5353
import com.oracle.graal.python.builtins.objects.cext.PySequenceArrayWrapperMRFactory.ToNativeArrayNodeGen;
5454
import com.oracle.graal.python.builtins.objects.cext.PySequenceArrayWrapperMRFactory.ToNativeStorageNodeGen;
5555
import com.oracle.graal.python.builtins.objects.cext.PySequenceArrayWrapperMRFactory.WriteArrayItemNodeGen;
56+
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.InvalidateNativeObjectsAllManagedNode;
5657
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
5758
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetSequenceStorageNode;
58-
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.InvalidateNativeObjectsAllManagedNode;
59-
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.PIsPointerNode;
6059
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
6160
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.ListGeneralizationNode;
6261
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.NormalizeIndexNode;
@@ -413,7 +412,7 @@ public static ToNativeArrayNode create() {
413412

414413
@Resolve(message = "IS_POINTER")
415414
abstract static class IsPointerNode extends Node {
416-
@Child private PIsPointerNode pIsPointerNode = PIsPointerNode.create();
415+
@Child private CExtNodes.IsPointerNode pIsPointerNode = CExtNodes.IsPointerNode.create();
417416

418417
boolean access(PySequenceArrayWrapper obj) {
419418
return pIsPointerNode.execute(obj);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PyUnicodeWrapperMR.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import com.oracle.graal.python.builtins.objects.cext.PyUnicodeWrapperMRFactory.PyUnicodeToNativeNodeGen;
5252
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.InvalidateNativeObjectsAllManagedNode;
5353
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.PAsPointerNode;
54-
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.PIsPointerNode;
5554
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMR.ToPyObjectNode;
5655
import com.oracle.graal.python.builtins.objects.cext.UnicodeObjectNodes.UnicodeAsWideCharNode;
5756
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -158,7 +157,7 @@ Object access(PyUnicodeWrapper obj) {
158157

159158
@Resolve(message = "IS_POINTER")
160159
abstract static class IsPointerNode extends Node {
161-
@Child private PIsPointerNode pIsPointerNode = PIsPointerNode.create();
160+
@Child private CExtNodes.IsPointerNode pIsPointerNode = CExtNodes.IsPointerNode.create();
162161

163162
boolean access(PyUnicodeWrapper obj) {
164163
return pIsPointerNode.execute(obj);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/PythonObjectNativeWrapperMR.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.GetSulongTypeNodeGen;
6666
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.InvalidateNativeObjectsAllManagedNodeGen;
6767
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.PAsPointerNodeGen;
68-
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.PIsPointerNodeGen;
6968
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.ReadNativeMemberNodeGen;
7069
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.ToPyObjectNodeGen;
7170
import com.oracle.graal.python.builtins.objects.cext.PythonObjectNativeWrapperMRFactory.WriteNativeMemberNodeGen;
@@ -929,36 +928,13 @@ private ToPyObjectNode getToPyObjectNode() {
929928

930929
@Resolve(message = "IS_POINTER")
931930
abstract static class IsPointerNode extends Node {
932-
@Child private PIsPointerNode pIsPointerNode = PIsPointerNode.create();
931+
@Child private CExtNodes.IsPointerNode pIsPointerNode = CExtNodes.IsPointerNode.create();
933932

934933
boolean access(PythonNativeWrapper obj) {
935934
return pIsPointerNode.execute(obj);
936935
}
937936
}
938937

939-
abstract static class PIsPointerNode extends PNodeWithContext {
940-
941-
public abstract boolean execute(PythonNativeWrapper obj);
942-
943-
@Specialization(assumptions = {"singleContextAssumption()", "nativeObjectsAllManagedAssumption()"})
944-
boolean doFalse(@SuppressWarnings("unused") PythonNativeWrapper obj) {
945-
return false;
946-
}
947-
948-
@Specialization
949-
boolean doGeneric(PythonNativeWrapper obj) {
950-
return obj.isNative();
951-
}
952-
953-
protected Assumption nativeObjectsAllManagedAssumption() {
954-
return getContext().getNativeObjectsAllManagedAssumption();
955-
}
956-
957-
public static PIsPointerNode create() {
958-
return PIsPointerNodeGen.create();
959-
}
960-
}
961-
962938
abstract static class InvalidateNativeObjectsAllManagedNode extends PNodeWithContext {
963939

964940
public abstract void execute();

0 commit comments

Comments
 (0)