Mercurial > cpython-lru_cache-weakref
diff Objects/object.c @ 16385:1fb6672b20ef legacy-trunk
PEP 205, Weak References -- initial checkin.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Thu, 01 Feb 2001 05:27:45 +0000 |
| parents | e5d59a9dbfc0 |
| children | 8466bb37289c |
line wrap: on
line diff
--- a/Objects/object.c Thu Feb 01 05:26:54 2001 +0000 +++ b/Objects/object.c Thu Feb 01 05:27:45 2001 +0000 @@ -100,6 +100,10 @@ /* Any changes should be reflected in PyObject_INIT (objimpl.h) */ op->ob_type = tp; _Py_NewReference(op); + if (PyType_SUPPORTS_WEAKREFS(tp)) { + PyObject **weaklist = PyObject_GET_WEAKREFS_LISTPTR(op); + *weaklist = NULL; + } return op; } @@ -119,6 +123,10 @@ op->ob_size = size; op->ob_type = tp; _Py_NewReference((PyObject *)op); + if (PyType_SUPPORTS_WEAKREFS(tp)) { + PyObject **weaklist = PyObject_GET_WEAKREFS_LISTPTR(op); + *weaklist = NULL; + } return op; } @@ -1458,6 +1466,21 @@ } +/* Hook to clear up weak references only once the _weakref module is + imported. We use a dummy implementation to simplify the code at each + call site instead of requiring a test for NULL. +*/ + +static int +empty_clear_weak_refs(PyObject *o) +{ + return 1; +} + +int (*PyObject_ClearWeakRefs)(PyObject *) = empty_clear_weak_refs; + + + /* These methods are used to control infinite recursion in repr, str, print, etc. Container objects that may recursively contain themselves, e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
