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

mwh@users.sourceforge.net mwh@users.sourceforge.net
2002年6月19日 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++) {

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