Skip to content

Commit c743885

Browse files
committed
Replace cannotBeOverridden check for list/dict/tuple with isBuiltin checks
1 parent 9cb4aa6 commit c743885

26 files changed

+230
-193
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,6 @@
232232
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
233233
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
234234
import com.oracle.graal.python.nodes.object.GetClassNode;
235-
import com.oracle.graal.python.nodes.object.GetClassNode.GetPythonObjectClassNode;
236235
import com.oracle.graal.python.nodes.object.GetOrCreateDictNode;
237236
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
238237
import com.oracle.graal.python.nodes.util.CannotCastException;
@@ -464,26 +463,22 @@ protected boolean doHashStorage(VirtualFrame frame, HashingStorage hashingStorag
464463
@GenerateNodeFactory
465464
public abstract static class AllNode extends PythonUnaryBuiltinNode {
466465

467-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
466+
@Specialization(guards = "isBuiltinList(object)")
468467
static boolean doList(VirtualFrame frame, PList object,
469468
@Bind("this") Node inliningTarget,
470-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
471469
@Shared("allOrAnySeqNode") @Cached AllOrAnySequenceStorageNode allOrAnyNode) {
472470
return allOrAnyNode.execute(frame, inliningTarget, object.getSequenceStorage(), AnyOrAllNodeType.ALL);
473471
}
474472

475-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
473+
@Specialization(guards = "isBuiltinTuple(object)")
476474
static boolean doTuple(VirtualFrame frame, PTuple object,
477475
@Bind("this") Node inliningTarget,
478-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
479476
@Shared("allOrAnySeqNode") @Cached AllOrAnySequenceStorageNode allOrAnyNode) {
480477
return allOrAnyNode.execute(frame, inliningTarget, object.getSequenceStorage(), AnyOrAllNodeType.ALL);
481478
}
482479

483-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
480+
@Specialization(guards = "isBuiltinHashingCollection(object)")
484481
static boolean doHashColl(VirtualFrame frame, PHashingCollection object,
485-
@SuppressWarnings("unused") @Bind("this") Node inliningTarget,
486-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
487482
@Cached AllOrAnyHashingStorageNode allOrAnyNode) {
488483
return allOrAnyNode.execute(frame, object.getDictStorage(), AnyOrAllNodeType.ALL);
489484
}
@@ -521,26 +516,22 @@ static boolean doObject(VirtualFrame frame, Object object,
521516
@GenerateNodeFactory
522517
public abstract static class AnyNode extends PythonUnaryBuiltinNode {
523518

524-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
519+
@Specialization(guards = "isBuiltinList(object)")
525520
static boolean doList(VirtualFrame frame, PList object,
526521
@Bind("this") Node inliningTarget,
527-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
528522
@Shared("allOrAnySeqNode") @Cached AllOrAnySequenceStorageNode allOrAnyNode) {
529523
return allOrAnyNode.execute(frame, inliningTarget, object.getSequenceStorage(), AnyOrAllNodeType.ANY);
530524
}
531525

532-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
526+
@Specialization(guards = "isBuiltinTuple(object)")
533527
static boolean doTuple(VirtualFrame frame, PTuple object,
534528
@Bind("this") Node inliningTarget,
535-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
536529
@Shared("allOrAnySeqNode") @Cached AllOrAnySequenceStorageNode allOrAnyNode) {
537530
return allOrAnyNode.execute(frame, inliningTarget, object.getSequenceStorage(), AnyOrAllNodeType.ANY);
538531
}
539532

540-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
533+
@Specialization(guards = "isBuiltinHashingCollection(object)")
541534
static boolean doHashColl(VirtualFrame frame, PHashingCollection object,
542-
@SuppressWarnings("unused") @Bind("this") Node inliningTarget,
543-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetPythonObjectClassNode getClassNode,
544535
@Cached AllOrAnyHashingStorageNode allOrAnyNode) {
545536
return allOrAnyNode.execute(frame, object.getDictStorage(), AnyOrAllNodeType.ANY);
546537
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/PDict.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_ITEMS;
2929
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_KEYS;
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.T_VALUES;
31+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
3132

3233
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
3334
import com.oracle.graal.python.builtins.objects.common.EconomicMapStorage;
@@ -41,7 +42,6 @@
4142
import com.oracle.graal.python.builtins.objects.common.KeywordsStorage;
4243
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
4344
import com.oracle.graal.python.builtins.objects.function.PKeyword;
44-
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
4545
import com.oracle.graal.python.lib.PyObjectCallMethodObjArgs;
4646
import com.oracle.graal.python.lib.PyObjectGetIter;
4747
import com.oracle.graal.python.lib.PyObjectHashNode;
@@ -67,14 +67,7 @@
6767
public class PDict extends PHashingCollection {
6868

6969
public PDict(Object cls, Shape instanceShape, HashingStorage dictStorage) {
70-
super(ensurePBCT(cls), instanceShape, dictStorage);
71-
}
72-
73-
private static Object ensurePBCT(Object cls) {
74-
if (cls instanceof PythonBuiltinClass && ((PythonBuiltinClass) cls).getType() == PythonBuiltinClassType.PDict) {
75-
return PythonBuiltinClassType.PDict;
76-
}
77-
return cls;
70+
super(builtinClassToType(cls), instanceShape, dictStorage);
7871
}
7972

8073
public PDict(Object cls, Shape instanceShape) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@
142142
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
143143
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
144144
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
145-
import com.oracle.graal.python.nodes.object.GetClassNode;
146145
import com.oracle.graal.python.nodes.object.GetClassNode.GetPythonObjectClassNode;
147146
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
148147
import com.oracle.graal.python.runtime.PythonContext;
@@ -3273,31 +3272,23 @@ static long doL(long self) {
32733272
return self;
32743273
}
32753274

3276-
@Specialization(guards = "cannotBeOverridden(self, inliningTarget, getClassNode)")
3277-
static PInt doPInt(PInt self,
3278-
@Bind("this") Node inliningTarget,
3279-
@SuppressWarnings("unused") @Shared @Cached GetClassNode getClassNode) {
3275+
@Specialization(guards = "isBuiltinPInt(self)")
3276+
static PInt doPInt(PInt self) {
32803277
return self;
32813278
}
32823279

3283-
@Specialization(guards = "!cannotBeOverridden(self, inliningTarget, getClassNode)", rewriteOn = OverflowException.class)
3284-
static int doPIntOverridenNarrowInt(PInt self,
3285-
@Bind("this") Node inliningTarget,
3286-
@SuppressWarnings("unused") @Shared @Cached GetClassNode getClassNode) throws OverflowException {
3280+
@Specialization(guards = "!isBuiltinPInt(self)", rewriteOn = OverflowException.class)
3281+
static int doPIntOverridenNarrowInt(PInt self) throws OverflowException {
32873282
return self.intValueExact();
32883283
}
32893284

3290-
@Specialization(guards = "!cannotBeOverridden(self, inliningTarget, getClassNode)", replaces = "doPIntOverridenNarrowInt", rewriteOn = OverflowException.class)
3291-
static long doPIntOverridenNarrowLong(PInt self,
3292-
@Bind("this") Node inliningTarget,
3293-
@SuppressWarnings("unused") @Shared @Cached GetClassNode getClassNode) throws OverflowException {
3285+
@Specialization(guards = "!isBuiltinPInt(self)", replaces = "doPIntOverridenNarrowInt", rewriteOn = OverflowException.class)
3286+
static long doPIntOverridenNarrowLong(PInt self) throws OverflowException {
32943287
return self.longValueExact();
32953288
}
32963289

3297-
@Specialization(guards = "!cannotBeOverridden(self, inliningTarget, getClassNode)", replaces = "doPIntOverridenNarrowLong")
3290+
@Specialization(guards = "!isBuiltinPInt(self)", replaces = "doPIntOverridenNarrowLong")
32983291
static PInt doPIntOverriden(PInt self,
3299-
@SuppressWarnings("unused") @Bind("this") Node inliningTarget,
3300-
@SuppressWarnings("unused") @Shared @Cached GetClassNode getClassNode,
33013292
@Cached PythonObjectFactory factory) {
33023293
return factory.createInt(self.getValue());
33033294
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/iterator/IteratorNodes.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,25 +131,24 @@ static int doTruffleString(TruffleString str,
131131
return codePointLengthNode.execute(str, TS_ENCODING);
132132
}
133133

134-
@Specialization(guards = "cannotBeOverriddenForImmutableType(object)")
134+
@Specialization(guards = "isBuiltinList(object)")
135135
static int doList(PList object) {
136136
return object.getSequenceStorage().length();
137137
}
138138

139-
@Specialization(guards = "cannotBeOverriddenForImmutableType(object)")
139+
@Specialization(guards = "isBuiltinTuple(object)")
140140
static int doTuple(PTuple object) {
141141
return object.getSequenceStorage().length();
142142
}
143143

144-
@Specialization(guards = "cannotBeOverriddenForImmutableType(object)")
144+
@Specialization(guards = "isBuiltinDict(object)")
145145
static int doDict(Node inliningTarget, PDict object,
146146
@Shared("hashingStorageLen") @Cached HashingStorageLen lenNode) {
147147
return lenNode.execute(inliningTarget, object.getDictStorage());
148148
}
149149

150-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
150+
@Specialization(guards = "isBuiltinSet(object)")
151151
static int doSet(Node inliningTarget, PSet object,
152-
@Shared("getClass") @SuppressWarnings("unused") @Cached GetPythonObjectClassNode getClassNode,
153152
@Shared("hashingStorageLen") @Cached HashingStorageLen lenNode) {
154153
return lenNode.execute(inliningTarget, object.getDictStorage());
155154
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/list/PList.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.list;
2727

28+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
29+
2830
import com.oracle.graal.python.builtins.objects.common.IndexNodes;
2931
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
3032
import com.oracle.graal.python.builtins.objects.ints.PInt;
@@ -60,13 +62,13 @@ public final class PList extends PSequence {
6062
private SequenceStorage store;
6163

6264
public PList(Object cls, Shape instanceShape, SequenceStorage store) {
63-
super(cls, instanceShape);
65+
super(builtinClassToType(cls), instanceShape);
6466
this.origin = null;
6567
this.store = store;
6668
}
6769

6870
public PList(Object cls, Shape instanceShape, SequenceStorage store, ListOrigin origin) {
69-
super(cls, instanceShape);
71+
super(builtinClassToType(cls), instanceShape);
7072
this.origin = origin;
7173
this.store = store;
7274
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/BaseSetBuiltins.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@
100100
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
101101
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
102102
import com.oracle.graal.python.nodes.object.GetClassNode;
103-
import com.oracle.graal.python.nodes.object.GetClassNode.GetPythonObjectClassNode;
104103
import com.oracle.graal.python.runtime.PythonContext;
105104
import com.oracle.graal.python.runtime.exception.PException;
106105
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
@@ -340,11 +339,10 @@ static boolean isDisjointSameObject(PBaseSet self, @SuppressWarnings("unused") P
340339
return lenNode.execute(inliningTarget, self.getDictStorage()) == 0;
341340
}
342341

343-
@Specialization(guards = {"self != other", "cannotBeOverridden(other, inliningTarget, getClassNode)"}, limit = "1")
342+
@Specialization(guards = {"self != other", "isBuiltinAnySet(other)"})
344343
static boolean isDisjointFastPath(VirtualFrame frame, PBaseSet self, PBaseSet other,
345344
@Bind("this") Node inliningTarget,
346-
@Cached HashingStorageAreDisjoint disjointNode,
347-
@SuppressWarnings("unused") @Cached GetPythonObjectClassNode getClassNode) {
345+
@Cached HashingStorageAreDisjoint disjointNode) {
348346
return disjointNode.execute(frame, inliningTarget, self.getDictStorage(), other.getDictStorage());
349347
}
350348

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/PFrozenSet.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.set;
2727

28+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
29+
2830
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
2931
import com.oracle.truffle.api.object.Shape;
3032

@@ -33,11 +35,11 @@ public class PFrozenSet extends PBaseSet {
3335
private long hash = -1;
3436

3537
public PFrozenSet(Object clazz, Shape instanceShape) {
36-
super(clazz, instanceShape);
38+
super(builtinClassToType(clazz), instanceShape);
3739
}
3840

3941
public PFrozenSet(Object clazz, Shape instanceShape, HashingStorage store) {
40-
super(clazz, instanceShape, store);
42+
super(builtinClassToType(clazz), instanceShape, store);
4143
}
4244

4345
@Override

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/PSet.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.set;
2727

28+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
29+
2830
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
2931
import com.oracle.truffle.api.object.Shape;
3032

3133
public final class PSet extends PBaseSet {
3234

3335
public PSet(Object clazz, Shape instanceShape) {
34-
super(clazz, instanceShape);
36+
super(builtinClassToType(clazz), instanceShape);
3537
}
3638

3739
public PSet(Object clazz, Shape instanceShape, HashingStorage store) {
38-
super(clazz, instanceShape, store);
40+
super(builtinClassToType(clazz), instanceShape, store);
3941
}
4042
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/PTuple.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.tuple;
2727

28+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
29+
2830
import com.oracle.graal.python.runtime.sequence.PSequence;
2931
import com.oracle.graal.python.runtime.sequence.storage.MroSequenceStorage;
3032
import com.oracle.graal.python.runtime.sequence.storage.ObjectSequenceStorage;
@@ -45,12 +47,12 @@ public final class PTuple extends PSequence {
4547
private long hash = -1;
4648

4749
public PTuple(Object cls, Shape instanceShape, Object[] elements) {
48-
super(cls, instanceShape);
50+
super(builtinClassToType(cls), instanceShape);
4951
this.store = new ObjectSequenceStorage(elements);
5052
}
5153

5254
public PTuple(Object cls, Shape instanceShape, SequenceStorage store) {
53-
super(cls, instanceShape);
55+
super(builtinClassToType(cls), instanceShape);
5456
this.store = store;
5557
}
5658

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyDictCheckExactNode.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@
4141
package com.oracle.graal.python.lib;
4242

4343
import com.oracle.graal.python.builtins.objects.dict.PDict;
44-
import com.oracle.graal.python.nodes.PNodeWithContext;
44+
import com.oracle.graal.python.nodes.PGuards;
4545
import com.oracle.truffle.api.dsl.GenerateCached;
4646
import com.oracle.truffle.api.dsl.GenerateInline;
4747
import com.oracle.truffle.api.dsl.GenerateUncached;
48+
import com.oracle.truffle.api.dsl.ImportStatic;
4849
import com.oracle.truffle.api.dsl.Specialization;
4950
import com.oracle.truffle.api.nodes.Node;
5051

@@ -54,7 +55,8 @@
5455
@GenerateUncached
5556
@GenerateCached(false)
5657
@GenerateInline
57-
public abstract class PyDictCheckExactNode extends PNodeWithContext {
58+
@ImportStatic(PGuards.class)
59+
public abstract class PyDictCheckExactNode extends Node {
5860
public static boolean executeUncached(Object object) {
5961
return PyDictCheckExactNodeGen.getUncached().execute(null, object);
6062
}

0 commit comments

Comments
 (0)