diff Objects/setobject.c @ 32158:679e5c8effae legacy-trunk

Make sets and deques weak referencable.
author Raymond Hettinger <python@rcn.com>
date Sun, 30 May 2004 07:26:47 +0000
parents 72e38bd94e56
children b9de6b665273
line wrap: on
line diff
--- a/Objects/setobject.c	Fri May 28 20:59:21 2004 +0000
+++ b/Objects/setobject.c	Sun May 30 07:26:47 2004 +0000
@@ -1,4 +1,5 @@
 #include "Python.h"
+#include "structmember.h"
 
 /* set object implementation 
    written and maintained by Raymond D. Hettinger <python@rcn.com>
@@ -61,6 +62,7 @@
 	}
 	so->data = data;
 	so->hash = -1;
+	so->weakreflist = NULL;
 
 	if (iterable != NULL) {
 		tmp = set_update(so, iterable);
@@ -113,6 +115,8 @@
 set_dealloc(PySetObject *so)
 {
 	PyObject_GC_UnTrack(so);
+	if (so->weakreflist != NULL)
+		PyObject_ClearWeakRefs((PyObject *) so);
 	Py_XDECREF(so->data);
 	so->ob_type->tp_free(so);
 }
@@ -1009,12 +1013,12 @@
 	0,				/* tp_setattro */
 	0,				/* tp_as_buffer */
 	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES |
-		Py_TPFLAGS_BASETYPE,	/* tp_flags */
+		Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_WEAKREFS,	/* tp_flags */
 	set_doc,			/* tp_doc */
 	(traverseproc)set_traverse,	/* tp_traverse */
 	(inquiry)set_tp_clear,		/* tp_clear */
 	(richcmpfunc)set_richcompare,	/* tp_richcompare */
-	0,				/* tp_weaklistoffset */
+	offsetof(PySetObject, weakreflist),	/* tp_weaklistoffset */
 	(getiterfunc)set_iter,		/* tp_iter */
 	0,				/* tp_iternext */
 	set_methods,			/* tp_methods */
@@ -1104,12 +1108,12 @@
 	0,				/* tp_setattro */
 	0,				/* tp_as_buffer */
 	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES |
-		Py_TPFLAGS_BASETYPE,	/* tp_flags */
+		Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_WEAKREFS,	/* tp_flags */
 	frozenset_doc,			/* tp_doc */
 	(traverseproc)set_traverse,	/* tp_traverse */
 	0,				/* tp_clear */
 	(richcmpfunc)set_richcompare,	/* tp_richcompare */
-	0,				/* tp_weaklistoffset */
+	offsetof(PySetObject, weakreflist),	/* tp_weaklistoffset */
 	(getiterfunc)set_iter,		/* tp_iter */
 	0,				/* tp_iternext */
 	frozenset_methods,		/* tp_methods */