[Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.17,2.18
Neil Schemenauer
nascheme@users.sourceforge.net
Fri, 10 Aug 2001 07:46:50 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv5235
Modified Files:
gcmodule.c
Log Message:
Remove "referents" structure (it's not needed). Check return value
of PyList_Append.
Index: gcmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
retrieving revision 2.17
retrieving revision 2.18
diff -C2 -d -r2.17 -r2.18
*** gcmodule.c 2001/08/09 15:58:59 2.17
--- gcmodule.c 2001/08/10 14:46:47 2.18
***************
*** 678,691 ****
}
- struct referents{
- PyObject *objs;
- int seen;
- };
-
static int
! referentsvisit(PyObject* obj, struct referents* refs)
{
! if (PySequence_Contains (refs->objs, obj)) {
! refs->seen = 1;
return 1;
}
--- 678,685 ----
}
static int
! referentsvisit(PyObject* obj, PyObject *objs)
{
! if (PySequence_Contains(objs, obj)) {
return 1;
}
***************
*** 693,697 ****
}
! static void
gc_referents_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
{
--- 687,691 ----
}
! static int
gc_referents_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
{
***************
*** 699,713 ****
PyObject *obj;
traverseproc traverse;
! struct referents refs = {objs, 0};
! for (gc = list->gc_next; gc != list; gc = gc->gc_next){
! obj = PyObject_FROM_GC(gc);
traverse = obj->ob_type->tp_traverse;
if (obj == objs || obj == resultlist)
continue;
! if (traverse(obj, (visitproc)referentsvisit, &refs)) {
! PyList_Append(resultlist, obj);
! refs.seen = 0;
}
}
}
--- 693,707 ----
PyObject *obj;
traverseproc traverse;
! for (gc = list->gc_next; gc != list; gc = gc->gc_next) {
! obj = PyObject_FROM_GC(gc);
traverse = obj->ob_type->tp_traverse;
if (obj == objs || obj == resultlist)
continue;
! if (traverse(obj, (visitproc)referentsvisit, objs)) {
! if (PyList_Append(resultlist, obj) < 0)
! return 0; /* error */
}
}
+ return 1; /* no error */
}
***************
*** 716,726 ****
Return the list of objects that directly refer to any of objs.";
! static PyObject*
! gc_get_referents(PyObject *self, PyObject* args)
{
PyObject *result = PyList_New(0);
! gc_referents_for(args, &generation0, result);
! gc_referents_for(args, &generation1, result);
! gc_referents_for(args, &generation2, result);
return result;
}
--- 710,723 ----
Return the list of objects that directly refer to any of objs.";
! static PyObject *
! gc_get_referents(PyObject *self, PyObject *args)
{
PyObject *result = PyList_New(0);
! if (!(gc_referents_for(args, &generation0, result) &&
! gc_referents_for(args, &generation1, result) &&
! gc_referents_for(args, &generation2, result))) {
! Py_DECREF(result);
! return NULL;
! }
return result;
}