gh-150490: Raise PyType_Modified for insertion into split dictionary … · python/cpython@efb2fff

GitHub

File tree

Include/internal

Modules/_testinternalcapi

Objects

Python

Original file line numberDiff line numberDiff line change@@ -90,6 +90,8 @@ typedef struct {

9090} PyDictUnicodeEntry;

91919292externPyDictKeysObject*_PyDict_NewKeysForClass(PyHeapTypeObject*);

93+externvoid_PyDict_RemoveKeysForClass(PyHeapTypeObject*);

94+externvoid_PyDict_SplitKeysInvalidated(PyDictKeysObject*keys);

9395externPyObject*_PyDict_FromKeys(PyObject*, PyObject*, PyObject*);

94969597/* Implementations of the `|` and `|=` operators for dict, used by the

@@ -239,6 +241,17 @@ struct _dictkeysobject {

239241 see the DK_ENTRIES() / DK_UNICODE_ENTRIES() functions below */

240242};

241243244+struct_instancekeysobject {

245+PyTypeObject*dsk_owning_type;

246+struct_dictkeysobjectdsk_keys;

247+};

248+249+staticinlinestruct_instancekeysobject*_PyDictKeys_AsSharedKeys(struct_dictkeysobject*keys)

250+{

251+assert(keys->dk_kind==DICT_KEYS_SPLIT);

252+return_Py_CONTAINER_OF(keys, struct_instancekeysobject, dsk_keys);

253+}

254+242255/* This must be no more than 250, for the prefix size to fit in one byte. */

243256#defineSHARED_KEYS_MAX_SIZE 30

244257#defineNEXT_LOG2_SHARED_KEYS_MAX_SIZE 6