There was an error while loading. Please reload this page.
1 parent 369ce43 commit e256c6bCopy full SHA for e256c6b
14 files changed
Include/internal/pycore_dict.h
@@ -90,6 +90,8 @@ typedef struct {
90
} PyDictUnicodeEntry;
91
92
extern PyDictKeysObject *_PyDict_NewKeysForClass(PyHeapTypeObject *);
93
+extern void _PyDict_RemoveKeysForClass(PyHeapTypeObject *);
94
+extern void _PyDict_SplitKeysInvalidated(PyDictKeysObject* keys);
95
extern PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
96
97
/* Implementations of the `|` and `|=` operators for dict, used by the
@@ -239,6 +241,17 @@ struct _dictkeysobject {
239
241
see the DK_ENTRIES() / DK_UNICODE_ENTRIES() functions below */
240
242
};
243
244
+struct _instancekeysobject {
245
+ PyTypeObject* dsk_owning_type;
246
+ struct _dictkeysobject dsk_keys;
247
+};
248
+
249
+static inline struct _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
255
/* This must be no more than 250, for the prefix size to fit in one byte. */
256
#define SHARED_KEYS_MAX_SIZE 30
257
#define NEXT_LOG2_SHARED_KEYS_MAX_SIZE 6
Include/internal/pycore_opcode_metadata.h
Include/internal/pycore_typeobject.h
@@ -148,6 +148,9 @@ extern int _PyType_AddMethod(PyTypeObject *, PyMethodDef *);
148
extern void _PyType_SetFlagsRecursive(PyTypeObject *self, unsigned long mask,
149
unsigned long flags);
150
151
+// Raise PyType_Modified with the type lock already held.
152
+extern void _PyType_Modified_Unlocked(PyTypeObject *type);
153
154
PyAPI_FUNC(void) _PyType_SetVersion(PyTypeObject *tp, unsigned int version);
155
PyTypeObject *_PyType_LookupByVersion(unsigned int version);
156
0 commit comments