summaryrefslogtreecommitdiffstats
path: root/Objects/frameobject.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2022-10-27 10:55:03 (GMT)
committerGitHub <noreply@github.com>2022-10-27 10:55:03 (GMT)
commit22863df7ca5f9cd01a40ab3dce3d067ec5666081 (patch)
tree73c460d80f41b45a331b7d886defe39127e12472 /Objects/frameobject.c
parente60892f9db1316dbabf7a652d7648e4f968b745d (diff)
downloadcpython-22863df7ca5f9cd01a40ab3dce3d067ec5666081.zip
cpython-22863df7ca5f9cd01a40ab3dce3d067ec5666081.tar.gz
cpython-22863df7ca5f9cd01a40ab3dce3d067ec5666081.tar.bz2
GH-96793: Change `FOR_ITER` to not pop the iterator on exhaustion. (GH-96801)
Change FOR_ITER to have the same stack effect regardless of whether it branches or not. Performance is unchanged as FOR_ITER (and specialized forms jump over the cleanup code).
Diffstat (limited to 'Objects/frameobject.c')
-rw-r--r--Objects/frameobject.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 8b4494a..dd69207 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -367,8 +367,8 @@ mark_stacks(PyCodeObject *code_obj, int len)
break;
case FOR_ITER:
{
- int64_t target_stack = pop_value(next_stack);
- stacks[i+1] = push_value(next_stack, Object);
+ int64_t target_stack = push_value(next_stack, Object);
+ stacks[i+1] = target_stack;
j = get_arg(code, i) + 1 + INLINE_CACHE_ENTRIES_FOR_ITER + i;
assert(j < len);
assert(stacks[j] == UNINITIALIZED || stacks[j] == target_stack);