Mercurial > cpython-lru_cache-weakref
diff Objects/classobject.c @ 60112:7b8ba019cd15 legacy-trunk
Issue #8268: Old-style classes (not just instances) now support weak
references.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Wed, 31 Mar 2010 21:32:15 +0000 |
| parents | 5d2b66e01968 |
| children | fd25030223b0 |
line wrap: on
line diff
--- a/Objects/classobject.c Wed Mar 31 21:21:54 2010 +0000 +++ b/Objects/classobject.c Wed Mar 31 21:32:15 2010 +0000 @@ -123,6 +123,7 @@ op->cl_dict = dict; Py_XINCREF(name); op->cl_name = name; + op->cl_weakreflist = NULL; op->cl_getattr = class_lookup(op, getattrstr, &dummy); op->cl_setattr = class_lookup(op, setattrstr, &dummy); @@ -188,6 +189,8 @@ class_dealloc(PyClassObject *op) { _PyObject_GC_UNTRACK(op); + if (op->cl_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) op); Py_DECREF(op->cl_bases); Py_DECREF(op->cl_dict); Py_XDECREF(op->cl_name); @@ -454,7 +457,7 @@ (traverseproc)class_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(PyClassObject, cl_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */
