[Python-checkins] GH-91432: Remove the iterator_exhausted_no_error label (GH-96517)
brandtbucher
webhook-mailer at python.org
Wed Sep 7 00:07:31 EDT 2022
https://github.com/python/cpython/commit/0d04b8d9e1953d2311f78b772f21c9e07fbcbb6d
commit: 0d04b8d9e1953d2311f78b772f21c9e07fbcbb6d
branch: main
author: Brandt Bucher <brandtbucher at microsoft.com>
committer: brandtbucher <brandtbucher at gmail.com>
date: 2022-09-06T21:07:20-07:00
summary:
GH-91432: Remove the iterator_exhausted_no_error label (GH-96517)
files:
M Python/ceval.c
diff --git a/Python/ceval.c b/Python/ceval.c
index 971f6f177c9..af47e091bc7 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3816,10 +3816,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
}
_PyErr_Clear(tstate);
}
- iterator_exhausted_no_error:
/* iterator ended normally */
- assert(!_PyErr_Occurred(tstate));
- Py_DECREF(POP());
+ STACK_SHRINK(1);
+ Py_DECREF(iter);
JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
DISPATCH();
}
@@ -3845,19 +3844,21 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
DEOPT_IF(Py_TYPE(it) != &PyListIter_Type, FOR_ITER);
STAT_INC(FOR_ITER, hit);
PyListObject *seq = it->it_seq;
- if (seq == NULL) {
- goto iterator_exhausted_no_error;
- }
- if (it->it_index < PyList_GET_SIZE(seq)) {
- PyObject *next = PyList_GET_ITEM(seq, it->it_index++);
- Py_INCREF(next);
- PUSH(next);
- JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER);
- NOTRACE_DISPATCH();
+ if (seq) {
+ if (it->it_index < PyList_GET_SIZE(seq)) {
+ PyObject *next = PyList_GET_ITEM(seq, it->it_index++);
+ Py_INCREF(next);
+ PUSH(next);
+ JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER);
+ NOTRACE_DISPATCH();
+ }
+ it->it_seq = NULL;
+ Py_DECREF(seq);
}
- it->it_seq = NULL;
- Py_DECREF(seq);
- goto iterator_exhausted_no_error;
+ STACK_SHRINK(1);
+ Py_DECREF(it);
+ JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
+ NOTRACE_DISPATCH();
}
TARGET(FOR_ITER_RANGE) {
@@ -3868,7 +3869,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
_Py_CODEUNIT next = next_instr[INLINE_CACHE_ENTRIES_FOR_ITER];
assert(_PyOpcode_Deopt[_Py_OPCODE(next)] == STORE_FAST);
if (r->index >= r->len) {
- goto iterator_exhausted_no_error;
+ STACK_SHRINK(1);
+ Py_DECREF(r);
+ JUMPBY(INLINE_CACHE_ENTRIES_FOR_ITER + oparg);
+ NOTRACE_DISPATCH();
}
long value = (long)(r->start +
(unsigned long)(r->index++) * r->step);
More information about the Python-checkins
mailing list