diff options
author | Mark Shannon <mark@hotpy.org> | 2023-01-24 17:25:37 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-24 17:25:37 (GMT) |
commit | f02fa64bf2d03ef7a28650c164e17a5fb5d8543d (patch) | |
tree | a794d0afb47c84bf9a77d4feaa26e8e1fb23be07 /Python/compile.c | |
parent | daec3a463c747c852d7ee91e82770fb1763d7d31 (diff) | |
download | cpython-f02fa64bf2d03ef7a28650c164e17a5fb5d8543d.zip cpython-f02fa64bf2d03ef7a28650c164e17a5fb5d8543d.tar.gz cpython-f02fa64bf2d03ef7a28650c164e17a5fb5d8543d.tar.bz2 |
GH-100762: Don't call `gen.throw()` in `gen.close()`, unless necessary. (GH-101013)
* Store exception stack depth in YIELD_VALUE's oparg and use it avoid expensive gen.throw() in gen.close() where possible.
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Python/compile.c b/Python/compile.c index ce714dc..9fc997c 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -7162,9 +7162,6 @@ stackdepth(basicblock *entryblock, int code_flags) next = NULL; break; } - if (instr->i_opcode == YIELD_VALUE) { - instr->i_oparg = depth; - } } if (next != NULL) { assert(BB_HAS_FALLTHROUGH(b)); @@ -7332,6 +7329,9 @@ label_exception_targets(basicblock *entryblock) { } } else { + if (instr->i_opcode == YIELD_VALUE) { + instr->i_oparg = except_stack->depth; + } instr->i_except = handler; } } |