Skip to content

Commit 19e5180

Browse files
committed
Replace cannotBeOverridden check for str/bytes/bytearray
1 parent c743885 commit 19e5180

20 files changed

+103
-143
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/SequenceStorageNodes.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,11 +2264,10 @@ private static int lengthResult(int current, int ext) {
22642264
}
22652265
}
22662266

2267-
@Specialization(guards = {"hasStorage(seq)", "cannotBeOverridden(seq, inliningTarget, getClassNode)"}, limit = "1")
2267+
@Specialization(guards = {"hasStorage(seq)", "isBuiltinSequence(seq)"})
22682268
@SuppressWarnings("truffle-static-method")
22692269
SequenceStorage doWithStorage(SequenceStorage left, PSequence seq, int len,
22702270
@Bind("this") Node inliningTarget,
2271-
@SuppressWarnings("unused") @Exclusive @Cached GetClassNode getClassNode,
22722271
@Cached GetSequenceStorageNode getStorageNode,
22732272
@Exclusive @Cached EnsureCapacityNode ensureCapacityNode,
22742273
@Cached ConcatBaseNode concatStoragesNode) {
@@ -2295,12 +2294,11 @@ SequenceStorage doWithStorage(SequenceStorage left, PSequence seq, int len,
22952294
}
22962295
}
22972296

2298-
@Specialization(guards = "!hasStorage(iterable) || !cannotBeOverridden(iterable, inliningTarget, getClassNode)", limit = "1")
2297+
@Fallback
22992298
@SuppressWarnings("truffle-static-method")
23002299
@InliningCutoff
23012300
SequenceStorage doWithoutStorage(VirtualFrame frame, SequenceStorage left, Object iterable, int len,
23022301
@Bind("this") Node inliningTarget,
2303-
@SuppressWarnings("unused") @Exclusive @Cached GetClassNode getClassNode,
23042302
@Cached PyObjectGetIter getIter,
23052303
@Exclusive @Cached EnsureCapacityNode ensureCapacityNode,
23062304
@Cached GetNextNode getNextNode,

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,14 @@ static int doSet(Node inliningTarget, PSet object,
153153
return lenNode.execute(inliningTarget, object.getDictStorage());
154154
}
155155

156-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
157-
static int doPString(Node inliningTarget, PString object,
158-
@Shared("getClass") @SuppressWarnings("unused") @Cached GetPythonObjectClassNode getClassNode,
156+
@Specialization(guards = "isBuiltinPString(object)")
157+
static int doPString(PString object,
159158
@Cached(inline = false) StringNodes.StringLenNode lenNode) {
160159
return lenNode.execute(object);
161160
}
162161

163-
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
164-
static int doPBytes(Node inliningTarget, PBytesLike object,
165-
@Shared("getClass") @SuppressWarnings("unused") @Cached GetPythonObjectClassNode getClassNode) {
162+
@Specialization(guards = "isBuiltinBytesLike(object)")
163+
static int doPBytes(PBytesLike object) {
166164
return object.getSequenceStorage().length();
167165
}
168166

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/PString.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package com.oracle.graal.python.builtins.objects.str;
2727

2828
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
29+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
2930

3031
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
3132
import com.oracle.graal.python.builtins.objects.str.StringNodes.StringMaterializeNode;
@@ -62,12 +63,12 @@ public final class PString extends PSequence {
6263
private PBytes wCharBytes;
6364

6465
public PString(Object clazz, Shape instanceShape, NativeCharSequence value) {
65-
super(clazz, instanceShape);
66+
super(builtinClassToType(clazz), instanceShape);
6667
this.nativeCharSequence = value;
6768
}
6869

6970
public PString(Object clazz, Shape instanceShape, TruffleString value) {
70-
super(clazz, instanceShape);
71+
super(builtinClassToType(clazz), instanceShape);
7172
assert value != null;
7273
this.materializedValue = value;
7374
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringNodes.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
package com.oracle.graal.python.builtins.objects.str;
4242

4343
import static com.oracle.graal.python.nodes.ErrorMessages.INVALID_SEQ_ITEM;
44-
import static com.oracle.graal.python.nodes.PGuards.cannotBeOverridden;
44+
import static com.oracle.graal.python.nodes.PGuards.isBuiltinPString;
4545
import static com.oracle.graal.python.nodes.StringLiterals.T_EMPTY_STRING;
4646
import static com.oracle.graal.python.runtime.exception.PythonErrorType.MemoryError;
4747
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
@@ -488,9 +488,8 @@ static PString doString(Node inliningTarget, TruffleString string,
488488

489489
@Specialization
490490
static PString doPString(Node inliningTarget, PString string,
491-
@Cached GetClassNode getClassNode,
492491
@Shared @Cached HiddenAttr.WriteNode writeNode) {
493-
if (cannotBeOverridden(getClassNode.execute(inliningTarget, string))) {
492+
if (isBuiltinPString(string)) {
494493
writeNode.execute(inliningTarget, string, HiddenAttr.INTERNED, true);
495494
return string;
496495
}

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@
4040
*/
4141
package com.oracle.graal.python.lib;
4242

43-
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
44-
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectExactProfile;
45-
import com.oracle.truffle.api.dsl.Cached;
43+
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
44+
import com.oracle.graal.python.nodes.PGuards;
45+
import com.oracle.truffle.api.dsl.Fallback;
4646
import com.oracle.truffle.api.dsl.GenerateCached;
4747
import com.oracle.truffle.api.dsl.GenerateInline;
4848
import com.oracle.truffle.api.dsl.GenerateUncached;
49+
import com.oracle.truffle.api.dsl.ImportStatic;
4950
import com.oracle.truffle.api.dsl.Specialization;
5051
import com.oracle.truffle.api.nodes.Node;
5152

@@ -55,16 +56,21 @@
5556
@GenerateUncached
5657
@GenerateInline
5758
@GenerateCached(false)
59+
@ImportStatic(PGuards.class)
5860
public abstract class PyBytesCheckExactNode extends Node {
61+
public static boolean executeUncached(Object object) {
62+
return PyBytesCheckExactNodeGen.getUncached().execute(null, object);
63+
}
64+
5965
public abstract boolean execute(Node inliningTarget, Object object);
6066

61-
@Specialization
62-
static boolean doGeneric(Node inliningTarget, Object object,
63-
@Cached IsBuiltinObjectExactProfile isBuiltin) {
64-
return isBuiltin.profileObject(inliningTarget, object, PythonBuiltinClassType.PBytes);
67+
@Specialization(guards = "isBuiltinBytes(bytes)")
68+
static boolean doBuiltinBytes(@SuppressWarnings("unused") PBytes bytes) {
69+
return true;
6570
}
6671

67-
public static boolean executeUncached(Object object) {
68-
return PyBytesCheckExactNodeGen.getUncached().execute(null, object);
72+
@Fallback
73+
static boolean doOther(@SuppressWarnings("unused") Object object) {
74+
return false;
6975
}
7076
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import com.oracle.graal.python.builtins.objects.dict.PDict;
4444
import com.oracle.graal.python.nodes.PGuards;
45+
import com.oracle.truffle.api.dsl.Fallback;
4546
import com.oracle.truffle.api.dsl.GenerateCached;
4647
import com.oracle.truffle.api.dsl.GenerateInline;
4748
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -68,12 +69,7 @@ static boolean doBuiltinDict(@SuppressWarnings("unused") PDict dict) {
6869
return true;
6970
}
7071

71-
@Specialization(guards = "!isBuiltinDict(dict)")
72-
static boolean doOtherDict(@SuppressWarnings("unused") PDict dict) {
73-
return false;
74-
}
75-
76-
@Specialization(guards = "!isDict(object)")
72+
@Fallback
7773
static boolean doOther(@SuppressWarnings("unused") Object object) {
7874
return false;
7975
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import com.oracle.graal.python.builtins.objects.set.PFrozenSet;
4444
import com.oracle.graal.python.nodes.PGuards;
45+
import com.oracle.truffle.api.dsl.Fallback;
4546
import com.oracle.truffle.api.dsl.GenerateCached;
4647
import com.oracle.truffle.api.dsl.GenerateInline;
4748
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -68,12 +69,7 @@ static boolean doBuiltinFrozenSet(@SuppressWarnings("unused") PFrozenSet frozenS
6869
return true;
6970
}
7071

71-
@Specialization(guards = "!isBuiltinFrozenSet(frozenSet)")
72-
static boolean doOtherFrozenSet(@SuppressWarnings("unused") PFrozenSet frozenSet) {
73-
return false;
74-
}
75-
76-
@Specialization(guards = "!isPFrozenSet(object)")
72+
@Fallback
7773
static boolean doOther(@SuppressWarnings("unused") Object object) {
7874
return false;
7975
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import com.oracle.graal.python.builtins.objects.list.PList;
4444
import com.oracle.graal.python.nodes.PGuards;
45+
import com.oracle.truffle.api.dsl.Fallback;
4546
import com.oracle.truffle.api.dsl.GenerateCached;
4647
import com.oracle.truffle.api.dsl.GenerateInline;
4748
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -68,12 +69,7 @@ static boolean doBuiltinList(@SuppressWarnings("unused") PList list) {
6869
return true;
6970
}
7071

71-
@Specialization(guards = "!isBuiltinList(list)")
72-
static boolean doOtherList(@SuppressWarnings("unused") PList list) {
73-
return false;
74-
}
75-
76-
@Specialization(guards = "!isList(object)")
72+
@Fallback
7773
static boolean doOther(@SuppressWarnings("unused") Object object) {
7874
return false;
7975
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static long doObject(VirtualFrame frame, Node inliningTarget, Object object,
108108
@Cached BuiltinPyLongAsLongAndOverflowNode recursive) throws OverflowException {
109109
Object result = indexNode.execute(frame, inliningTarget, object);
110110
// PyNumberIndexNode guarantees that the result is a builtin integer
111-
assert PyLongCheckExactNode.canBeBuiltinInt(result);
111+
assert PyLongCheckExactNode.executeUncached(result);
112112
return recursive.execute(frame, inliningTarget, result);
113113
}
114114

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

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.oracle.graal.python.builtins.objects.cext.PythonNativeVoidPtr;
4444
import com.oracle.graal.python.builtins.objects.ints.PInt;
4545
import com.oracle.graal.python.nodes.PNodeWithContext;
46+
import com.oracle.truffle.api.dsl.Fallback;
4647
import com.oracle.truffle.api.dsl.GenerateCached;
4748
import com.oracle.truffle.api.dsl.GenerateInline;
4849
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -56,7 +57,7 @@
5657
@GenerateInline
5758
@GenerateCached(false)
5859
public abstract class PyLongCheckExactNode extends PNodeWithContext {
59-
public static final boolean executeUncached(Object object) {
60+
public static boolean executeUncached(Object object) {
6061
return PyLongCheckExactNodeGen.getUncached().execute(null, object);
6162
}
6263

@@ -77,24 +78,14 @@ static boolean doBuiltinPInt(@SuppressWarnings("unused") PInt object) {
7778
return true;
7879
}
7980

80-
@Specialization(guards = "!isBuiltinPInt(object)")
81-
static boolean doOtherPInt(@SuppressWarnings("unused") PInt object) {
82-
return false;
83-
}
84-
85-
@Specialization(guards = "!canBeBuiltinInt(object)")
86-
static boolean doOther(@SuppressWarnings("unused") Object object) {
87-
return false;
88-
}
89-
9081
@Specialization
9182
static boolean doNativePtr(@SuppressWarnings("unused") PythonNativeVoidPtr object) {
9283
return true;
9384
}
9485

95-
protected static boolean canBeBuiltinInt(Object object) {
96-
// Boolean is a subclass, don't put it here
97-
return object instanceof Integer || object instanceof Long || object instanceof PInt || object instanceof PythonNativeVoidPtr;
86+
@Fallback
87+
static boolean doOther(@SuppressWarnings("unused") Object object) {
88+
return false;
9889
}
9990

10091
public static PyLongCheckExactNode getUncached() {

0 commit comments

Comments
 (0)