[Python-checkins] python/dist/src/Modules gcmodule.c,2.68,2.69
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Tue, 08 Apr 2003 09:39:52 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv2197/python/Modules
Modified Files:
gcmodule.c
Log Message:
Finished implementing gc.get_referrents(): dealt with error and end
cases, wrote docs, added a test.
Index: gcmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
retrieving revision 2.68
retrieving revision 2.69
diff -C2 -d -r2.68 -r2.69
*** gcmodule.c 7 Apr 2003 22:41:24 -0000 2.68
--- gcmodule.c 8 Apr 2003 16:39:48 -0000 2.69
***************
*** 858,867 ****
}
static int
referrentsvisit(PyObject *obj, PyObject *list)
{
! if (PyList_Append(list, obj) < 0)
! return 1;
! return 0;
}
--- 858,866 ----
}
+ /* Append obj to list; return true if error (out of memory), false if OK. */
static int
referrentsvisit(PyObject *obj, PyObject *list)
{
! return PyList_Append(list, obj) < 0;
}
***************
*** 875,885 ****
int i;
PyObject *result = PyList_New(0);
for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
PyObject *obj = PyTuple_GET_ITEM(args, i);
! traverseproc traverse = obj->ob_type->tp_traverse;
! if (!traverse)
continue;
! if (traverse(obj, (visitproc)referrentsvisit, result))
return NULL;
}
return result;
--- 874,894 ----
int i;
PyObject *result = PyList_New(0);
+
+ if (result == NULL)
+ return NULL;
+
for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
+ traverseproc traverse;
PyObject *obj = PyTuple_GET_ITEM(args, i);
!
! if (! PyObject_IS_GC(obj))
continue;
! traverse = obj->ob_type->tp_traverse;
! if (! traverse)
! continue;
! if (traverse(obj, (visitproc)referrentsvisit, result)) {
! Py_DECREF(result);
return NULL;
+ }
}
return result;