From 41deb1efc2f969b58e49af669cc20d15ccdb04c6 Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Thu, 1 Feb 2001 05:27:45 +0000 Subject: PEP 205, Weak References -- initial checkin. --- Include/objimpl.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Include/objimpl.h') diff --git a/Include/objimpl.h b/Include/objimpl.h index 4909517793..93c5b2346a 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -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 -- cgit v1.2.1