[Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.17,2.18

Neil Schemenauer nascheme@users.sourceforge.net
2001年8月10日 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;
 }

AltStyle によって変換されたページ (->オリジナル) /