mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
PEP 205, Weak References -- initial checkin.
This commit is contained in:
parent
2de7471d69
commit
41deb1efc2
9 changed files with 1158 additions and 4 deletions
|
@ -160,7 +160,11 @@ extern DL_IMPORT(void) _PyObject_Del(PyObject *);
|
|||
/* Macros trading binary compatibility for speed. See also pymem.h.
|
||||
Note that these macros expect non-NULL object pointers.*/
|
||||
#define PyObject_INIT(op, typeobj) \
|
||||
( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )
|
||||
((op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), \
|
||||
(PyType_SUPPORTS_WEAKREFS((typeobj)) \
|
||||
? *(PyObject_GET_WEAKREFS_LISTPTR(op)) = NULL \
|
||||
: NULL), \
|
||||
(op))
|
||||
#define PyObject_INIT_VAR(op, typeobj, size) \
|
||||
( (op)->ob_size = (size), PyObject_INIT((op), (typeobj)) )
|
||||
|
||||
|
@ -266,6 +270,12 @@ extern DL_IMPORT(void) _PyGC_Dump(PyGC_Head *);
|
|||
|
||||
#endif /* WITH_CYCLE_GC */
|
||||
|
||||
/* Test if a type supports weak references */
|
||||
#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
|
||||
|
||||
#define PyObject_GET_WEAKREFS_LISTPTR(o) \
|
||||
((PyObject **) (((char *) (o)) + (o)->ob_type->tp_weaklistoffset))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue