Skip to content

Commit f3a66dc

Browse files
committed
Remove SpecialMethodSlot
1 parent b7191a8 commit f3a66dc

File tree

60 files changed

+187
-2598
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

+187
-2598
lines changed

graalpython/com.oracle.graal.python.cext/src/typeobject.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6605,9 +6605,6 @@ PyType_Ready(PyTypeObject *type)
66056605
type->tp_flags = (type->tp_flags & ~Py_TPFLAGS_READYING) | Py_TPFLAGS_READY;
66066606
assert(_PyType_CheckConsistency(type));
66076607

6608-
// GraalPy change
6609-
GraalPyTruffle_InitializeOldStyleSlots(type);
6610-
66116608
// GraalPy change: for reason, see first call to Py_INCREF in this function
66126609
Py_DECREF(type);
66136610
return 0;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
6666
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
6767
import com.oracle.graal.python.builtins.objects.frame.PFrame;
68-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
6968
import com.oracle.graal.python.builtins.objects.function.PArguments;
7069
import com.oracle.graal.python.builtins.objects.module.PythonModule;
7170
import com.oracle.graal.python.builtins.objects.object.PythonObject;
@@ -85,8 +84,8 @@
8584
import com.oracle.graal.python.nodes.HiddenAttr;
8685
import com.oracle.graal.python.nodes.bytecode.PBytecodeRootNode;
8786
import com.oracle.graal.python.nodes.bytecode_dsl.BytecodeDSLCodeUnit;
88-
import com.oracle.graal.python.nodes.call.CallNode;
8987
import com.oracle.graal.python.nodes.call.CallDispatchers;
88+
import com.oracle.graal.python.nodes.call.CallNode;
9089
import com.oracle.graal.python.nodes.exception.TopLevelExceptionHandler;
9190
import com.oracle.graal.python.nodes.frame.GetFrameLocalsNode;
9291
import com.oracle.graal.python.nodes.frame.MaterializeFrameNode;
@@ -370,14 +369,6 @@ public boolean isSingleContext() {
370369
*/
371370
private volatile boolean isLanguageInitialized;
372371

373-
/**
374-
* A map to retrieve call targets of special slot methods for a given BuiltinMethodDescriptor.
375-
* Used to perform uncached calls to slots. The call targets are not directly part of
376-
* descriptors because that would make them specific to a language instance. We want to have
377-
* them global in order to be able to efficiently compare them in guards.
378-
*/
379-
private final ConcurrentHashMap<BuiltinMethodDescriptor, RootCallTarget> descriptorCallTargets = new ConcurrentHashMap<>();
380-
381372
private final Shape emptyShape = Shape.newBuilder().allowImplicitCastIntToDouble(false).allowImplicitCastIntToLong(true).shapeFlags(0).propertyAssumptions(true).build();
382373
@CompilationFinal(dimensions = 1) private final Shape[] builtinTypeInstanceShapes = new Shape[PythonBuiltinClassType.VALUES.length];
383374

@@ -1189,22 +1180,6 @@ private RootCallTarget createCachedCallTargetUnsafe(Function<PythonLanguage, Roo
11891180
return createCachedCallTargetUnsafe(rootNodeFunction, Arrays.asList(cacheKeys), cacheInSingleContext);
11901181
}
11911182

1192-
public void registerBuiltinDescriptorCallTarget(BuiltinMethodDescriptor descriptor, RootCallTarget callTarget) {
1193-
descriptorCallTargets.put(descriptor, callTarget);
1194-
}
1195-
1196-
/**
1197-
* Gets a {@link CallTarget} for given {@link BuiltinMethodDescriptor}. The
1198-
* {@link BuiltinMethodDescriptor} must have been inserted into the slots of some Python class
1199-
* in the current context, otherwise its {@link CallTarget} will not be cached here.
1200-
*/
1201-
@TruffleBoundary
1202-
public RootCallTarget getDescriptorCallTarget(BuiltinMethodDescriptor descriptor) {
1203-
RootCallTarget callTarget = descriptorCallTargets.get(descriptor);
1204-
assert callTarget != null : "Missing call target for builtin slot descriptor " + descriptor;
1205-
return callTarget;
1206-
}
1207-
12081183
@Override
12091184
protected void exitContext(PythonContext context, ExitMode exitMode, int exitCode) {
12101185
if (context.getCApiContext() != null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@
362362
import com.oracle.graal.python.builtins.objects.tuple.TupleGetterBuiltins;
363363
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
364364
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
365-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
366365
import com.oracle.graal.python.builtins.objects.type.TpSlots;
367366
import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
368367
import com.oracle.graal.python.builtins.objects.types.GenericAliasBuiltins;
@@ -920,14 +919,12 @@ public final void initialize(PythonContext context) {
920919
initializeImportlib();
921920
context.applyModuleOptions();
922921
initializePython3Core(context.getCoreHomeOrFail());
923-
assert SpecialMethodSlot.checkSlotOverrides(this);
924922
initialized = true;
925923
}
926924

927925
private void initializeJavaCore() {
928926
initializeTypes();
929927
populateBuiltins();
930-
SpecialMethodSlot.initializeBuiltinsSpecialMethodSlots(this);
931928
publishBuiltinModules();
932929
builtinsModule = builtinModules.get(BuiltinNames.T_BUILTINS);
933930
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,6 @@
176176
import com.oracle.graal.python.builtins.objects.foreign.ForeignObjectBuiltins;
177177
import com.oracle.graal.python.builtins.objects.frame.FrameBuiltins;
178178
import com.oracle.graal.python.builtins.objects.function.AbstractFunctionBuiltins;
179-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
180179
import com.oracle.graal.python.builtins.objects.function.FunctionBuiltins;
181180
import com.oracle.graal.python.builtins.objects.function.MethodDescriptorBuiltins;
182181
import com.oracle.graal.python.builtins.objects.function.WrapperDescriptorBuiltins;
@@ -261,7 +260,6 @@
261260
import com.oracle.graal.python.builtins.objects.tuple.StructSequenceBuiltins;
262261
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins;
263262
import com.oracle.graal.python.builtins.objects.tuple.TupleGetterBuiltins;
264-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
265263
import com.oracle.graal.python.builtins.objects.type.TpSlots;
266264
import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
267265
import com.oracle.graal.python.builtins.objects.types.GenericAliasBuiltins;
@@ -1246,15 +1244,6 @@ public TypeBuilder doc(String doc) {
12461244
@CompilationFinal private PythonBuiltinClassType type;
12471245
@CompilationFinal private int weaklistoffset;
12481246

1249-
/**
1250-
* Lookup cache for special slots defined in {@link SpecialMethodSlot}. Use
1251-
* {@link SpecialMethodSlot} to access the values. Unlike the cache in
1252-
* {@link com.oracle.graal.python.builtins.objects.type.PythonManagedClass}, this caches only
1253-
* builtin context independent values, most notably instances of {@link BuiltinMethodDescriptor}
1254-
* .
1255-
*/
1256-
private Object[] specialMethodSlots;
1257-
12581247
/**
12591248
* The slots defined directly on the builtin class.
12601249
*/
@@ -1339,13 +1328,6 @@ public TruffleString getDoc() {
13391328
return doc;
13401329
}
13411330

1342-
/**
1343-
* Access the values using methods in {@link SpecialMethodSlot}.
1344-
*/
1345-
public Object[] getSpecialMethodSlots() {
1346-
return specialMethodSlots;
1347-
}
1348-
13491331
public TpSlots getSlots() {
13501332
return slots;
13511333
}
@@ -1354,11 +1336,6 @@ public TpSlots getDeclaredSlots() {
13541336
return declaredSlots;
13551337
}
13561338

1357-
public void setSpecialMethodSlots(Object[] slots) {
1358-
assert specialMethodSlots == null; // should be assigned only once per VM
1359-
specialMethodSlots = slots;
1360-
}
1361-
13621339
public int getWeaklistoffset() {
13631340
return weaklistoffset;
13641341
}

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@
160160
import com.oracle.graal.python.builtins.objects.module.PythonModule;
161161
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
162162
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
163-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
164163
import com.oracle.graal.python.builtins.objects.type.TpSlots;
165164
import com.oracle.graal.python.builtins.objects.type.TpSlots.GetObjectSlotsNode;
166165
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
@@ -1387,7 +1386,7 @@ static boolean isInstance(VirtualFrame frame, Object instance, Object cls,
13871386
@Cached IsBuiltinClassExactProfile classProfile,
13881387
@Cached GetClassNode getInstanceClassNode,
13891388
@Cached TypeNodes.IsSameTypeNode isSameTypeNode,
1390-
@Cached("create(InstanceCheck)") LookupAndCallBinaryNode instanceCheckNode,
1389+
@Cached("create(T___INSTANCECHECK__)") LookupAndCallBinaryNode instanceCheckNode,
13911390
@Cached PyObjectIsTrueNode isTrueNode,
13921391
@Cached TypeNodes.GenericInstanceCheckNode genericInstanceCheckNode,
13931392
@Cached InlinedBranchProfile noInstanceCheckProfile) {
@@ -1434,7 +1433,7 @@ static boolean isSubclass(VirtualFrame frame, Object derived, Object cls,
14341433
@Bind Node inliningTarget,
14351434
@Cached GetClassNode getClsClassNode,
14361435
@Cached IsBuiltinClassExactProfile classProfile,
1437-
@Cached("create(Subclasscheck)") LookupAndCallBinaryNode subclassCheckNode,
1436+
@Cached("create(T___SUBCLASSCHECK__)") LookupAndCallBinaryNode subclassCheckNode,
14381437
@Cached PyObjectIsTrueNode isTrueNode,
14391438
@Cached TypeNodes.GenericSubclassCheckNode genericSubclassCheckNode,
14401439
@Cached InlinedBranchProfile noInstanceCheckProfile) {
@@ -1860,7 +1859,7 @@ public abstract static class FormatNode extends PythonBinaryBuiltinNode {
18601859
@Specialization
18611860
public static Object format(VirtualFrame frame, Object obj, Object formatSpec,
18621861
@Bind("this") Node inliningTarget,
1863-
@Cached("create(Format)") LookupAndCallBinaryNode callFormat,
1862+
@Cached("create(T___FORMAT__)") LookupAndCallBinaryNode callFormat,
18641863
@Cached InlinedConditionProfile formatIsNoValueProfile,
18651864
@Cached PRaiseNode raiseNode) {
18661865
Object format = formatIsNoValueProfile.profile(inliningTarget, isNoValue(formatSpec)) ? T_EMPTY_STRING : formatSpec;
@@ -1901,7 +1900,7 @@ public abstract static class RoundNode extends PythonBuiltinNode {
19011900
@Specialization
19021901
static Object round(VirtualFrame frame, Object x, @SuppressWarnings("unused") PNone n,
19031902
@Bind("this") Node inliningTarget,
1904-
@Cached("create(Round)") LookupAndCallUnaryNode callRound,
1903+
@Cached("create(T___ROUND__)") LookupAndCallUnaryNode callRound,
19051904
@Shared @Cached PRaiseNode raiseNode) {
19061905
Object result = callRound.executeObject(frame, x);
19071906
if (result == PNone.NO_VALUE) {
@@ -1913,7 +1912,7 @@ static Object round(VirtualFrame frame, Object x, @SuppressWarnings("unused") PN
19131912
@Specialization(guards = "!isPNone(n)")
19141913
static Object round(VirtualFrame frame, Object x, Object n,
19151914
@Bind("this") Node inliningTarget,
1916-
@Cached("create(Round)") LookupAndCallBinaryNode callRound,
1915+
@Cached("create(T___ROUND__)") LookupAndCallBinaryNode callRound,
19171916
@Shared @Cached PRaiseNode raiseNode) {
19181917
try {
19191918
return callRound.executeObject(frame, x, n);
@@ -2395,7 +2394,6 @@ static Object calculate(Object metatype, PTuple bases,
23952394

23962395
@Builtin(name = J___BUILD_CLASS__, minNumOfPositionalArgs = 1, takesVarArgs = true, takesVarKeywordArgs = true)
23972396
@GenerateNodeFactory
2398-
@ImportStatic(SpecialMethodSlot.class)
23992397
public abstract static class BuildClassNode extends PythonVarargsBuiltinNode {
24002398
private static final TruffleString T_METACLASS = tsLiteral("metaclass");
24012399
public static final TruffleString T_BUILD_JAVA_CLASS = tsLiteral("build_java_class");

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@
105105
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins.GetAttributeNode;
106106
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins.SetattrNode;
107107
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
108-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
109108
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
110109
import com.oracle.graal.python.lib.PyBytesCheckNode;
111110
import com.oracle.graal.python.lib.PyCallableCheckNode;
@@ -130,7 +129,7 @@
130129
import com.oracle.graal.python.nodes.argument.keywords.ExpandKeywordStarargsNode;
131130
import com.oracle.graal.python.nodes.call.CallNode;
132131
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
133-
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodSlotNode;
132+
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodNode;
134133
import com.oracle.graal.python.nodes.object.GetClassNode;
135134
import com.oracle.graal.python.nodes.object.GetOrCreateDictNode;
136135
import com.oracle.graal.python.nodes.object.IsNode;
@@ -152,7 +151,6 @@
152151
import com.oracle.truffle.api.dsl.Bind;
153152
import com.oracle.truffle.api.dsl.Cached;
154153
import com.oracle.truffle.api.dsl.Fallback;
155-
import com.oracle.truffle.api.dsl.ImportStatic;
156154
import com.oracle.truffle.api.dsl.Specialization;
157155
import com.oracle.truffle.api.interop.InteropException;
158156
import com.oracle.truffle.api.interop.InteropLibrary;
@@ -509,7 +507,6 @@ static int isTrue(Object obj,
509507
}
510508

511509
@CApiBuiltin(ret = PyObjectTransfer, args = {PyObject}, call = Direct)
512-
@ImportStatic(SpecialMethodSlot.class)
513510
abstract static class PyObject_Bytes extends CApiUnaryBuiltinNode {
514511
@Specialization(guards = "isBuiltinBytes(bytes)")
515512
static Object bytes(PBytes bytes) {
@@ -531,7 +528,7 @@ static Object doGeneric(Object obj,
531528
@Bind("this") Node inliningTarget,
532529
@Cached GetClassNode getClassNode,
533530
@Cached InlinedConditionProfile hasBytes,
534-
@Cached("create(Bytes)") LookupSpecialMethodSlotNode lookupBytes,
531+
@Cached("create(T___BYTES__)") LookupSpecialMethodNode lookupBytes,
535532
@Cached CallUnaryMethodNode callBytes,
536533
@Cached PyBytesCheckNode check,
537534
@Cached BytesNodes.BytesFromObject fromObject,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextTypeBuiltins.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
import com.oracle.graal.python.builtins.objects.object.PythonObject;
9494
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
9595
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
96-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
9796
import com.oracle.graal.python.builtins.objects.type.TpSlots;
9897
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
9998
import com.oracle.graal.python.lib.PyDictGetItem;
@@ -217,18 +216,6 @@ static PDict doGeneric(PythonNativeClass nativeClass) {
217216
}
218217
}
219218

220-
@CApiBuiltin(ret = ArgDescriptor.Void, args = {PyTypeObject}, call = Ignored)
221-
abstract static class PyTruffle_InitializeOldStyleSlots extends CApiUnaryBuiltinNode {
222-
223-
@TruffleBoundary
224-
@Specialization
225-
static Object doIt(PythonAbstractNativeObject clazz,
226-
@Bind("this") Node inliningTarget) {
227-
SpecialMethodSlot.reinitializeSpecialMethodSlots(clazz, PythonLanguage.get(inliningTarget));
228-
return PNone.NO_VALUE;
229-
}
230-
}
231-
232219
@CApiBuiltin(ret = ArgDescriptor.Void, args = {PyTypeObject}, call = Direct)
233220
abstract static class PyType_Modified extends CApiUnaryBuiltinNode {
234221
@TruffleBoundary

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesBuiltins.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SequenceStorageMpSubscriptNode;
5656
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SequenceStorageSqItemNode;
5757
import com.oracle.graal.python.builtins.objects.function.PKeyword;
58-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5958
import com.oracle.graal.python.builtins.objects.type.TpSlots;
6059
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
6160
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode;
@@ -71,7 +70,7 @@
7170
import com.oracle.graal.python.nodes.PRaiseNode;
7271
import com.oracle.graal.python.nodes.call.CallNode;
7372
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
74-
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodSlotNode;
73+
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodNode;
7574
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7675
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode;
7776
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode;
@@ -94,7 +93,6 @@
9493
import com.oracle.truffle.api.dsl.GenerateInline;
9594
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
9695
import com.oracle.truffle.api.dsl.GenerateUncached;
97-
import com.oracle.truffle.api.dsl.ImportStatic;
9896
import com.oracle.truffle.api.dsl.NodeFactory;
9997
import com.oracle.truffle.api.dsl.Specialization;
10098
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -119,7 +117,6 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
119117
@ArgumentClinic(name = "encoding", conversionClass = BytesNodes.ExpectStringNode.class, args = "\"bytes()\"")
120118
@ArgumentClinic(name = "errors", conversionClass = BytesNodes.ExpectStringNode.class, args = "\"bytes()\"")
121119
@GenerateNodeFactory
122-
@ImportStatic(SpecialMethodSlot.class)
123120
public abstract static class BytesNewNode extends PythonQuaternaryClinicBuiltinNode {
124121

125122
@Override
@@ -140,7 +137,7 @@ static Object doCallBytes(VirtualFrame frame, Object cls, Object source, PNone e
140137
@Bind("this") Node inliningTarget,
141138
@Cached GetClassNode getClassNode,
142139
@Cached InlinedConditionProfile hasBytes,
143-
@Cached("create(Bytes)") LookupSpecialMethodSlotNode lookupBytes,
140+
@Cached("create(T___BYTES__)") LookupSpecialMethodNode lookupBytes,
144141
@Cached CallUnaryMethodNode callBytes,
145142
@Cached BytesNodes.ToBytesNode toBytesNode,
146143
@Cached PyBytesCheckNode check,

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@
105105
import com.oracle.graal.python.builtins.objects.cext.structs.CStructs;
106106
import com.oracle.graal.python.builtins.objects.dict.PDict;
107107
import com.oracle.graal.python.builtins.objects.frame.PFrame;
108-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
109108
import com.oracle.graal.python.builtins.objects.ints.PInt;
110109
import com.oracle.graal.python.builtins.objects.module.PythonModule;
111110
import com.oracle.graal.python.builtins.objects.str.StringNodes;
@@ -1493,22 +1492,16 @@ public Object getOrAllocateNativePyMethodDef(PyMethodDefHelper pyMethodDef) {
14931492
}
14941493

14951494
/**
1496-
* A table mapping {@link BuiltinMethodDescriptor} or {@link RootCallTarget} to the appropriate
1497-
* {@link PyCFunctionWrapper}. This could actually be shared between Python contexts but
1498-
* {@link PyCFunctionWrapper} is still a {@link TruffleObject} and so it is assumed to be
1499-
* context-specific although our wrapper doesn't contain any data and is just used for executing
1500-
* code.
1495+
* A table mapping a {@link RootCallTarget} to the appropriate {@link PyCFunctionWrapper}. This
1496+
* could actually be shared between Python contexts but {@link PyCFunctionWrapper} is still a
1497+
* {@link TruffleObject} and so it is assumed to be context-specific although our wrapper
1498+
* doesn't contain any data and is just used for executing code.
15011499
*/
1502-
private final ConcurrentHashMap<Object, PyCFunctionWrapper> pyCFunctionWrappers = new ConcurrentHashMap<>(4);
1503-
1504-
@TruffleBoundary
1505-
public PyCFunctionWrapper getOrCreatePyCFunctionWrapper(BuiltinMethodDescriptor builtinMethodDescriptor, Function<BuiltinMethodDescriptor, PyCFunctionWrapper> cons) {
1506-
return pyCFunctionWrappers.computeIfAbsent(builtinMethodDescriptor, k -> cons.apply((BuiltinMethodDescriptor) k));
1507-
}
1500+
private final ConcurrentHashMap<RootCallTarget, PyCFunctionWrapper> pyCFunctionWrappers = new ConcurrentHashMap<>(4);
15081501

15091502
@TruffleBoundary
15101503
public PyCFunctionWrapper getOrCreatePyCFunctionWrapper(RootCallTarget ct, Function<RootCallTarget, PyCFunctionWrapper> cons) {
1511-
return pyCFunctionWrappers.computeIfAbsent(ct, k -> cons.apply((RootCallTarget) k));
1504+
return pyCFunctionWrappers.computeIfAbsent(ct, cons);
15121505
}
15131506

15141507
public static boolean isPointerObject(Object object) {

0 commit comments

Comments
 (0)