[Python-checkins] python/dist/src/Objects listobject.c,2.113,2.114

mwh@users.sourceforge.net mwh@users.sourceforge.net
Wed, 19 Jun 2002 08:44:17 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv17321/Objects

Modified Files:
	listobject.c 
Log Message:
Fix the bug described in

http://mail.python.org/pipermail/python-dev/2002-June/025461.html

with test cases.

Also includes extended slice support for arrays, which I thought I'd 
already checked in but obviously not.



Index: listobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v
retrieving revision 2.113
retrieving revision 2.114
diff -C2 -d -r2.113 -r2.114
*** listobject.c	14 Jun 2002 02:04:18 -0000	2.113
--- listobject.c	19 Jun 2002 15:44:15 -0000	2.114
***************
*** 1758,1764 ****
  		}
  
  		if (value == NULL) {
  			/* delete slice */
! 			PyObject **garbage, **item;
  			int cur, i, j;
  			
--- 1758,1768 ----
  		}
  
+ 		/* treat L[slice(a,b)] = v _exactly_ like L[a:b] = v */
+ 		if (step == 1 && ((PySliceObject*)item)->step == Py_None)
+ 			return list_ass_slice(self, start, stop, value);
+ 
  		if (value == NULL) {
  			/* delete slice */
! 			PyObject **garbage, **it;
  			int cur, i, j;
  			
***************
*** 1789,1793 ****
  				}
  			}
! 			for (cur = start + slicelength*step + 1; 
  			     cur < self->ob_size; cur++) {
  				PyList_SET_ITEM(self, cur - slicelength,
--- 1793,1797 ----
  				}
  			}
! 			for (cur = start + slicelength*step + 1;
  			     cur < self->ob_size; cur++) {
  				PyList_SET_ITEM(self, cur - slicelength,
***************
*** 1795,1801 ****
  			}
  			self->ob_size -= slicelength;
! 			item = self->ob_item;
! 			NRESIZE(item, PyObject*, self->ob_size);
! 			self->ob_item = item;
  
  			for (i = 0; i < slicelength; i++) {
--- 1799,1805 ----
  			}
  			self->ob_size -= slicelength;
! 			it = self->ob_item;
! 			NRESIZE(it, PyObject*, self->ob_size);
! 			self->ob_item = it;
  
  			for (i = 0; i < slicelength; i++) {