[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;
  }