mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
bpo-46417: Add _PyType_GetSubclasses() function (GH-30761)
Add a new _PyType_GetSubclasses() function to get type's subclasses. _PyType_GetSubclasses(type) returns a list which holds strong refererences to subclasses. It is safer than iterating on type->tp_subclasses which yields weak references and can be modified in the loop. _PyType_GetSubclasses(type) now holds a reference to the tp_subclasses dict while creating the list of subclasses. set_collection_flag_recursive() of _abc.c now uses _PyType_GetSubclasses().
This commit is contained in:
parent
57d1855682
commit
8ee07dda13
3 changed files with 75 additions and 54 deletions
|
|
@ -220,11 +220,12 @@ static inline PyObject **_PyObject_ManagedDictPointer(PyObject *obj)
|
|||
return ((PyObject **)obj)-3;
|
||||
}
|
||||
|
||||
PyObject ** _PyObject_DictPointer(PyObject *);
|
||||
int _PyObject_VisitInstanceAttributes(PyObject *self, visitproc visit, void *arg);
|
||||
void _PyObject_ClearInstanceAttributes(PyObject *self);
|
||||
void _PyObject_FreeInstanceAttributes(PyObject *self);
|
||||
int _PyObject_IsInstanceDictEmpty(PyObject *);
|
||||
extern PyObject ** _PyObject_DictPointer(PyObject *);
|
||||
extern int _PyObject_VisitInstanceAttributes(PyObject *self, visitproc visit, void *arg);
|
||||
extern void _PyObject_ClearInstanceAttributes(PyObject *self);
|
||||
extern void _PyObject_FreeInstanceAttributes(PyObject *self);
|
||||
extern int _PyObject_IsInstanceDictEmpty(PyObject *);
|
||||
extern PyObject* _PyType_GetSubclasses(PyTypeObject *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue