diff options
-rw-r--r-- | Lib/test/test_types.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 5 | ||||
-rw-r--r-- | Objects/listobject.c | 2 | ||||
-rw-r--r-- | Objects/tupleobject.c | 2 |
4 files changed, 9 insertions, 8 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 7e238df..1532295 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -256,11 +256,11 @@ def f(): yield i vereq(list(tuple(f())), range(1000)) -# Verify that __getitem__ overrides are recognized by __iter__ +# Verify that __getitem__ overrides are not recognized by __iter__ class T(tuple): def __getitem__(self, key): return str(key) + '!!!' -vereq(iter(T()).next(), '0!!!') +vereq(iter(T((1,2))).next(), 1) print '6.5.3 Lists' # calling built-in types without argument must return empty @@ -453,11 +453,11 @@ a = range(10) a[::2] = tuple(range(5)) vereq(a, [0, 1, 1, 3, 2, 5, 3, 7, 4, 9]) -# Verify that __getitem__ overrides are recognized by __iter__ +# Verify that __getitem__ overrides are not recognized by __iter__ class L(list): def __getitem__(self, key): return str(key) + '!!!' -vereq(iter(L()).next(), '0!!!') +vereq(iter(L([1,2])).next(), 1) print '6.6 Mappings == Dictionaries' @@ -15,6 +15,11 @@ Core and builtins - The softspace attribute of file objects became read-only by oversight. It's writable again. +- Reverted a 2.3 beta 1 change to iterators for subclasses of list and + tuple. By default, the iterators now access data elements directly + instead of going through __getitem__. If __getitem__ access is + preferred, then __iter__ can be overriden. + Extension modules ----------------- diff --git a/Objects/listobject.c b/Objects/listobject.c index 36bbe22..48f3d7d 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -2382,8 +2382,6 @@ list_iter(PyObject *seq) PyErr_BadInternalCall(); return NULL; } - if (seq->ob_type->tp_as_sequence->sq_item != (intargfunc)list_item) - return PySeqIter_New(seq); it = PyObject_GC_New(listiterobject, &PyListIter_Type); if (it == NULL) return NULL; diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 7456533..282da3e 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -753,8 +753,6 @@ tuple_iter(PyObject *seq) PyErr_BadInternalCall(); return NULL; } - if (seq->ob_type->tp_as_sequence->sq_item != (intargfunc)tupleitem) - return PySeqIter_New(seq); it = PyObject_GC_New(tupleiterobject, &PyTupleIter_Type); if (it == NULL) return NULL; |