From 7892b1c651d72a5bd08372f40309dec08a7065f0 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 12 Apr 2004 18:10:01 +0000 Subject: * 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 --- Objects/enumobject.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'Objects/enumobject.c') diff --git a/Objects/enumobject.c b/Objects/enumobject.c index 28719a9ce3..549fc9f0e5 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -225,6 +225,9 @@ reversed_next(reversedobject *ro) ro->index--; return item; } + if (PyErr_ExceptionMatches(PyExc_IndexError) || + PyErr_ExceptionMatches(PyExc_StopIteration)) + PyErr_Clear(); } ro->index = -1; if (ro->seq != NULL) { @@ -242,7 +245,15 @@ PyDoc_STRVAR(reversed_doc, static int reversed_len(reversedobject *ro) { - return ro->index + 1; + int position, seqsize; + + if (ro->seq == NULL) + return 0; + seqsize = PySequence_Size(ro->seq); + if (seqsize == -1) + return -1; + position = ro->index + 1; + return (seqsize < position) ? 0 : position; } static PySequenceMethods reversed_as_sequence = { -- cgit v1.2.1