summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_types.py8
-rw-r--r--Misc/NEWS5
-rw-r--r--Objects/listobject.c2
-rw-r--r--Objects/tupleobject.c2
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'
diff --git a/Misc/NEWS b/Misc/NEWS
index 9f982db..98feacc 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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;