summaryrefslogtreecommitdiff
path: root/Objects/iterobject.c
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2004-04-12 18:10:01 +0000
committerRaymond Hettinger <python@rcn.com>2004-04-12 18:10:01 +0000
commit7892b1c651d72a5bd08372f40309dec08a7065f0 (patch)
tree7ae71a1e81651c4fa7f786ebfbdbc8364a41730e /Objects/iterobject.c
parent45d0b5cc44ffb6227a2379a39b00d480f253edd5 (diff)
downloadcpython-git-7892b1c651d72a5bd08372f40309dec08a7065f0.tar.gz
* 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
Diffstat (limited to 'Objects/iterobject.c')
-rw-r--r--Objects/iterobject.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Objects/iterobject.c b/Objects/iterobject.c
index a407dd597f..25e4e11154 100644
--- a/Objects/iterobject.c
+++ b/Objects/iterobject.c
@@ -74,8 +74,16 @@ iter_iternext(PyObject *iterator)
static int
iter_len(seqiterobject *it)
{
- if (it->it_seq)
- return PyObject_Size(it->it_seq) - it->it_index;
+ 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;
}