Skip to content

Commit 1fc772e

Browse files
committed
[GR-54578] Refactor cannotBeOverridden checks
PullRequest: graalpython/3364
2 parents 3ca5511 + 583286f commit 1fc772e

File tree

60 files changed

+347
-600
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+347
-600
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_tuple.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
# Copyright (c) 2018, 2021, Oracle and/or its affiliates.
1+
# Copyright (c) 2018, 2024, Oracle and/or its affiliates.
22
# Copyright (C) 1996-2017 Python Software Foundation
33
#
44
# Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
5+
import sys
6+
57
import seq_tests
6-
#import pickle
78
from compare import CompareTest
89

10+
911
class TupleTest(seq_tests.CommonTest):
1012

1113
type2test = tuple
@@ -22,6 +24,9 @@ def test_constructors(self):
2224
self.assertEqual(tuple(''), ())
2325
self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
2426

27+
def test_from_subclass(self):
28+
self.assertIs(type(tuple(sys.version_info)), tuple)
29+
2530
def test_literal(self):
2631
self.assertEqual((1,2,3), (*[1,2,3],))
2732

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/modules/WarningsModuleBuiltins.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@
139139
import com.oracle.truffle.api.frame.Frame;
140140
import com.oracle.truffle.api.frame.VirtualFrame;
141141
import com.oracle.truffle.api.nodes.Node;
142-
import com.oracle.truffle.api.nodes.NodeInfo;
143142
import com.oracle.truffle.api.profiles.BranchProfile;
144143
import com.oracle.truffle.api.strings.TruffleString;
145144

@@ -985,7 +984,6 @@ private static TruffleString getSourceLine(Node node, PDict globals, int lineno)
985984
}
986985

987986
@ReportPolymorphism
988-
@NodeInfo(shortName = "warnings_warn_impl", description = "implements warnings_warn_impl and the clinic wrapper")
989987
@Builtin(name = J_WARN, minNumOfPositionalArgs = 2, parameterNames = {"$mod", "message", "category", "stacklevel", "source"}, declaresExplicitSelf = true, alwaysNeedsCallerFrame = true)
990988
@ArgumentClinic(name = "category", defaultValue = "PNone.NONE")
991989
@ArgumentClinic(name = "stacklevel", conversion = ClinicConversion.Int, defaultValue = "1")
@@ -1016,7 +1014,6 @@ public static WarnBuiltinNode create() {
10161014
}
10171015

10181016
@ReportPolymorphism
1019-
@NodeInfo(shortName = "warnings_warn_explicit")
10201017
@Builtin(name = J_WARN_EXPLICIT, minNumOfPositionalArgs = 5, //
10211018
parameterNames = {"$mod", "message", "category", "filename", "lineno", "module", "registry", "module_globals", "source"}, declaresExplicitSelf = true)
10221019
@ArgumentClinic(name = "lineno", conversion = ClinicConversion.Int)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/PByteArray.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.bytes;
2727

2828
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.BufferError;
29+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
2930

3031
import java.nio.ByteOrder;
3132

@@ -63,11 +64,11 @@ public final class PByteArray extends PBytesLike {
6364
private volatile long exports;
6465

6566
public PByteArray(Object cls, Shape instanceShape, byte[] bytes) {
66-
super(cls, instanceShape, bytes);
67+
super(builtinClassToType(cls), instanceShape, bytes);
6768
}
6869

6970
public PByteArray(Object cls, Shape instanceShape, SequenceStorage store) {
70-
super(cls, instanceShape, store);
71+
super(builtinClassToType(cls), instanceShape, store);
7172
}
7273

7374
@Override

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/PBytes.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.bytes;
2727

2828
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.BufferError;
29+
import static com.oracle.graal.python.util.PythonUtils.builtinClassToType;
2930

3031
import com.oracle.graal.python.builtins.objects.buffer.BufferFlags;
3132
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAcquireLibrary;
@@ -48,11 +49,11 @@
4849
public final class PBytes extends PBytesLike {
4950

5051
public PBytes(Object cls, Shape instanceShape, byte[] bytes) {
51-
super(cls, instanceShape, bytes);
52+
super(builtinClassToType(cls), instanceShape, bytes);
5253
}
5354

5455
public PBytes(Object cls, Shape instanceShape, SequenceStorage store) {
55-
super(cls, instanceShape, store);
56+
super(builtinClassToType(cls), instanceShape, store);
5657
}
5758

5859
@Override

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@
159159
import com.oracle.truffle.api.nodes.ExplodeLoop;
160160
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
161161
import com.oracle.truffle.api.nodes.Node;
162-
import com.oracle.truffle.api.nodes.NodeCost;
163162
import com.oracle.truffle.api.nodes.RootNode;
164163
import com.oracle.truffle.api.nodes.UnexpectedResultException;
165164
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -1078,12 +1077,6 @@ public String getName() {
10781077
return name.toJavaStringUncached();
10791078
}
10801079

1081-
@Override
1082-
public NodeCost getCost() {
1083-
// this is just a thin argument shuffling wrapper
1084-
return NodeCost.NONE;
1085-
}
1086-
10871080
@Override
10881081
public String toString() {
10891082
return "<METH root " + name + ">";

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

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -56,7 +56,6 @@
5656
import com.oracle.truffle.api.RootCallTarget;
5757
import com.oracle.truffle.api.dsl.NeverDefault;
5858
import com.oracle.truffle.api.nodes.Node;
59-
import com.oracle.truffle.api.nodes.NodeCost;
6059

6160
public abstract class GraalHPyArithmeticNode {
6261

@@ -88,11 +87,6 @@ private HPyUnaryArithmeticCached(UnaryArithmetic operator) {
8887
public Object execute(Object object) {
8988
return opNode.executeCached(null, object);
9089
}
91-
92-
@Override
93-
public NodeCost getCost() {
94-
return NodeCost.NONE;
95-
}
9690
}
9791

9892
private static final class HPyUnaryArithmeticUncached extends HPyUnaryArithmeticNode {
@@ -111,11 +105,6 @@ public Object execute(Object object) {
111105
return GenericInvokeNode.invokeUncached(callTarget, pythonArguments);
112106
}
113107

114-
@Override
115-
public NodeCost getCost() {
116-
return NodeCost.MEGAMORPHIC;
117-
}
118-
119108
@Override
120109
public boolean isAdoptable() {
121110
return false;
@@ -156,11 +145,6 @@ private HPyBinaryArithmeticCached(BinaryArithmetic operator) {
156145
public Object execute(Object arg0, Object arg1) {
157146
return opNode.executeObject(null, arg0, arg1);
158147
}
159-
160-
@Override
161-
public NodeCost getCost() {
162-
return NodeCost.NONE;
163-
}
164148
}
165149

166150
private static final class HPyBinaryArithmeticUncached extends HPyBinaryArithmeticNode {
@@ -180,11 +164,6 @@ public Object execute(Object arg0, Object arg1) {
180164
return GenericInvokeNode.invokeUncached(callTarget, pythonArguments);
181165
}
182166

183-
@Override
184-
public NodeCost getCost() {
185-
return NodeCost.MEGAMORPHIC;
186-
}
187-
188167
@Override
189168
public boolean isAdoptable() {
190169
return false;
@@ -225,11 +204,6 @@ private HPyTernaryArithmeticCached(TernaryArithmetic operator) {
225204
public Object execute(Object arg0, Object arg1, Object arg2) {
226205
return opNode.execute(null, arg0, arg1, arg2);
227206
}
228-
229-
@Override
230-
public NodeCost getCost() {
231-
return NodeCost.NONE;
232-
}
233207
}
234208

235209
private static final class HPyTernaryArithmeticUncached extends HPyTernaryArithmeticNode {
@@ -250,11 +224,6 @@ public Object execute(Object arg0, Object arg1, Object arg2) {
250224
return GenericInvokeNode.invokeUncached(callTarget, pythonArguments);
251225
}
252226

253-
@Override
254-
public NodeCost getCost() {
255-
return NodeCost.MEGAMORPHIC;
256-
}
257-
258227
@Override
259228
public boolean isAdoptable() {
260229
return false;
@@ -306,11 +275,6 @@ public Object execute(Object arg0, Object arg1, Object arg2) {
306275
return opNode.execute(null, arg0, arg1);
307276
}
308277
}
309-
310-
@Override
311-
public NodeCost getCost() {
312-
return NodeCost.NONE;
313-
}
314278
}
315279

316280
private static final class HPyInplaceArithmeticUncached extends HPyInplaceArithmeticNode {
@@ -331,11 +295,6 @@ public Object execute(Object arg0, Object arg1, Object arg2) {
331295
return GenericInvokeNode.invokeUncached(callTarget, pythonArguments);
332296
}
333297

334-
@Override
335-
public NodeCost getCost() {
336-
return NodeCost.MEGAMORPHIC;
337-
}
338-
339298
@Override
340299
public boolean isAdoptable() {
341300
return false;

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@
184184
import com.oracle.truffle.api.library.CachedLibrary;
185185
import com.oracle.truffle.api.nodes.ExplodeLoop;
186186
import com.oracle.truffle.api.nodes.Node;
187-
import com.oracle.truffle.api.nodes.NodeCost;
188187
import com.oracle.truffle.api.object.DynamicObjectLibrary;
189188
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
190189
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
@@ -1702,11 +1701,6 @@ public Object execute(Object object) {
17021701
return object;
17031702
}
17041703

1705-
@Override
1706-
public NodeCost getCost() {
1707-
return NodeCost.NONE;
1708-
}
1709-
17101704
@Override
17111705
public boolean isAdoptable() {
17121706
return this != UNCACHED;
@@ -2885,11 +2879,6 @@ public Object execute(GraalHPyContext hpyContext, Object pointerObject, LLVMType
28852879
return pointerObject;
28862880
}
28872881

2888-
@Override
2889-
public NodeCost getCost() {
2890-
return NodeCost.MONOMORPHIC;
2891-
}
2892-
28932882
@Override
28942883
public boolean isAdoptable() {
28952884
return false;

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
import com.oracle.truffle.api.interop.UnsupportedTypeException;
121121
import com.oracle.truffle.api.library.CachedLibrary;
122122
import com.oracle.truffle.api.nodes.Node;
123-
import com.oracle.truffle.api.nodes.NodeCost;
124123
import com.oracle.truffle.api.strings.TruffleString;
125124

126125
public abstract class HPyExternalFunctionNodes {
@@ -517,12 +516,6 @@ public TruffleString getTSName() {
517516
return name;
518517
}
519518

520-
@Override
521-
public NodeCost getCost() {
522-
// this is just a thin argument shuffling wrapper
523-
return NodeCost.NONE;
524-
}
525-
526519
@Override
527520
public String toString() {
528521
return "<METH root " + name.toJavaStringUncached() + ">";

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/jni/GraalHPyJNICallHelperFunctionNode.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -45,7 +45,6 @@
4545
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyNodes.HPyCallHelperFunctionNode;
4646
import com.oracle.graal.python.builtins.objects.cext.hpy.jni.GraalHPyJNINodes.HPyJNIFromCharPointerNode;
4747
import com.oracle.truffle.api.CompilerDirectives;
48-
import com.oracle.truffle.api.nodes.NodeCost;
4948

5049
/**
5150
* This is the implementation of {@link HPyCallHelperFunctionNode} for the JNI backend. This node
@@ -70,11 +69,6 @@ protected Object execute(GraalHPyContext context, GraalHPyNativeSymbol name, Obj
7069
};
7170
}
7271

73-
@Override
74-
public NodeCost getCost() {
75-
return NodeCost.MONOMORPHIC;
76-
}
77-
7872
@Override
7973
public boolean isAdoptable() {
8074
return false;

0 commit comments

Comments
 (0)