[Python-checkins] python/dist/src/Objects dictobject.c, 2.158, 2.159 enumobject.c, 1.15, 1.16 iterobject.c, 1.17, 1.18

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Mon Apr 12 14:10:04 EDT 2004


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14740/Objects

Modified Files:
	dictobject.c enumobject.c iterobject.c 
Log Message:
* Add unittests for iterators that report their length
* Document the differences between them
* Fix corner cases covered by the unittests
* Use Py_RETURN_NONE where possible for dictionaries



Index: dictobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
retrieving revision 2.158
retrieving revision 2.159
diff -C2 -d -r2.158 -r2.159
*** dictobject.c	20 Mar 2004 19:11:58 -0000	2.158
--- dictobject.c	12 Apr 2004 18:10:01 -0000	2.159
***************
*** 1089,1096 ****
  dict_update(PyObject *self, PyObject *args, PyObject *kwds)
  {
! 	if (dict_update_common(self, args, kwds, "update") == -1)
! 		return NULL;
! 	Py_INCREF(Py_None);
! 	return Py_None;
  }
  
--- 1089,1095 ----
  dict_update(PyObject *self, PyObject *args, PyObject *kwds)
  {
! 	if (dict_update_common(self, args, kwds, "update") != -1)
! 		Py_RETURN_NONE;
! 	return NULL;
  }
  
***************
*** 1594,1599 ****
  {
  	PyDict_Clear((PyObject *)mp);
! 	Py_INCREF(Py_None);
! 	return Py_None;
  }
  
--- 1593,1597 ----
  {
  	PyDict_Clear((PyObject *)mp);
! 	Py_RETURN_NONE;
  }
  
***************
*** 2051,2055 ****
  dictiter_len(dictiterobject *di)
  {
! 	return di->len;
  }
  
--- 2049,2055 ----
  dictiter_len(dictiterobject *di)
  {
! 	if (di->di_dict != NULL && di->di_used == di->di_dict->ma_used)
! 		return di->len;
! 	return 0;
  }
  

Index: enumobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/enumobject.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** enumobject.c	10 Mar 2004 10:10:42 -0000	1.15
--- enumobject.c	12 Apr 2004 18:10:01 -0000	1.16
***************
*** 226,229 ****
--- 226,232 ----
  			return item;
  		}
+ 		if (PyErr_ExceptionMatches(PyExc_IndexError) ||
+ 		    PyErr_ExceptionMatches(PyExc_StopIteration))
+ 			PyErr_Clear();
  	}
  	ro->index = -1;
***************
*** 243,247 ****
  reversed_len(reversedobject *ro)
  {
! 	return ro->index + 1;
  }
  
--- 246,258 ----
  reversed_len(reversedobject *ro)
  {
! 	int position, seqsize;
! 
! 	if (ro->seq == NULL)
! 		return 0;
! 	seqsize = PySequence_Size(ro->seq);
! 	if (seqsize == -1)
! 		return -1;
! 	position = ro->index + 1;
! 	return (seqsize < position)  ?  0  :  position;
  }
  

Index: iterobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/iterobject.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** iterobject.c	18 Mar 2004 22:43:09 -0000	1.17
--- iterobject.c	12 Apr 2004 18:10:01 -0000	1.18
***************
*** 75,80 ****
  iter_len(seqiterobject *it)
  {
! 	if (it->it_seq)
! 		return PyObject_Size(it->it_seq) - it->it_index;
  	return 0;
  }
--- 75,88 ----
  iter_len(seqiterobject *it)
  {
! 	int seqsize, len;
! 
! 	if (it->it_seq) {
! 		seqsize = PySequence_Size(it->it_seq);
! 		if (seqsize == -1)
! 			return -1;
! 		len = seqsize - it->it_index;
! 		if (len >= 0)
! 			return len;
! 	}
  	return 0;
  }




More information about the Python-checkins mailing list