summaryrefslogtreecommitdiffstats
path: root/Objects/classobject.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-03-31 21:32:15 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-03-31 21:32:15 (GMT)
commita57df2cf1d627840dff505e8487fbd5f42414c7b (patch)
tree87d099bca7fc01072ad6911e9ffa79707b982704 /Objects/classobject.c
parent26cc99da2a350f3093c9d7055794daef2034e2a4 (diff)
downloadcpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.zip
cpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.tar.gz
cpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.tar.bz2
Issue #8268: Old-style classes (not just instances) now support weak
references.
Diffstat (limited to 'Objects/classobject.c')
-rw-r--r--Objects/classobject.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 3f51c0f..032d354 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -123,6 +123,7 @@ alloc_error:
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 @@ static void
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 @@ PyTypeObject PyClass_Type = {
(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 */