Skip to content

Commit 3368840

Browse files
Add _PyObject_GetWeakRefsHead().
1 parent 181dc10 commit 3368840

File tree

4 files changed

+11
-10
lines changed

4 files changed

+11
-10
lines changed

Include/cpython/object.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,6 @@ PyAPI_FUNC(int) _PyObject_CheckConsistency(
422422
int check_content);
423423

424424

425-
Py_ssize_t _PyObject_GetWeakRefCount(PyObject *op);
426-
427-
428425
/* Trashcan mechanism, thanks to Christian Tismer.
429426
430427
When deallocating a container object, it's possible to trigger an unbounded

Include/cpython/weakrefobject.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,7 @@ static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj) {
5454
return Py_None;
5555
}
5656
#define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))
57+
58+
59+
PyWeakReference * _PyObject_GetWeakRefsHead(PyObject *op);
60+
Py_ssize_t _PyObject_GetWeakRefCount(PyObject *op);

Modules/_weakref.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
#include "Python.h"
2-
#include "pycore_object.h" // _PyObject_GET_WEAKREFS_LISTPTR
32

43

5-
#define GET_WEAKREFS_LISTPTR(o) \
6-
((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
7-
84
/*[clinic input]
95
module _weakref
106
[clinic start generated code]*/
@@ -86,11 +82,9 @@ _weakref_getweakrefs(PyObject *module, PyObject *object)
8682

8783
Py_ssize_t count = _PyObject_GetWeakRefCount(object);
8884
if (count > 0) {
89-
PyWeakReference **list = GET_WEAKREFS_LISTPTR(object);
90-
9185
result = PyList_New(count);
9286
if (result != NULL) {
93-
PyWeakReference *current = *list;
87+
PyWeakReference *current = _PyObject_GetWeakRefsHead(object);
9488
Py_ssize_t i;
9589
for (i = 0; i < count; ++i) {
9690
PyList_SET_ITEM(result, i, (PyObject *) current);

Objects/weakrefobject.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,12 @@ PyObject_GET_WEAKREFS_LISTPTR(PyObject *op)
947947
return _PyObject_GET_WEAKREFS_LISTPTR(op);
948948
}
949949

950+
PyWeakReference *
951+
_PyObject_GetWeakRefsHead(PyObject *op)
952+
{
953+
return (PyWeakReference *)(*_PyObject_GET_WEAKREFS_LISTPTR(op));
954+
}
955+
950956
Py_ssize_t
951957
_PyObject_GetWeakRefCount(PyObject *op)
952958
{

0 commit comments

Comments
 (0)