summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 1e724c5..3c9076c 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2091,21 +2091,23 @@ eval_frame(PyFrameObject *f)
case FOR_ITER:
/* before: [iter]; after: [iter, iter()] *or* [] */
v = TOP();
- x = PyIter_Next(v);
+ x = (*v->ob_type->tp_iternext)(v);
if (x != NULL) {
PUSH(x);
PREDICT(STORE_FAST);
PREDICT(UNPACK_SEQUENCE);
continue;
}
- if (!PyErr_Occurred()) {
- /* iterator ended normally */
- x = v = POP();
- Py_DECREF(v);
- JUMPBY(oparg);
- continue;
+ if (PyErr_Occurred()) {
+ if (!PyErr_ExceptionMatches(PyExc_StopIteration))
+ break;
+ PyErr_Clear();
}
- break;
+ /* iterator ended normally */
+ x = v = POP();
+ Py_DECREF(v);
+ JUMPBY(oparg);
+ continue;
case SETUP_LOOP:
case SETUP_EXCEPT: