-
-
Notifications
You must be signed in to change notification settings - Fork 30.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
broken optimization in gen_close() #111107
Labels
interpreter-core
(Objects, Python, Grammar, and Parser dirs)
Comments
If I try to fix the typo and use I think the return value is incorrect in some cases. |
The failure in testcontextlib is fixed by setting the frame state in case we return early:
|
Probably related: #111058 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There is an optimization in gen_close which attempts to shortcut the case where a sub-generator is being closed, and it is wrapped in only one try block (which is presumed to be for the
StopIteration
so can be ignored).However, there is a bug there where the exception depth is taken from
frame->prev_instr[0].op.code
, where it should beframe->prev_instr[0].op.arg
.At the moment this optimization is not doing anything because
exception_handler_depth
is never 1, it is either 118 (opcode ofYIELD_VALUE
) or 241 (opcode ofINSTRUMENTED_YIELD_VALUE
). If one of those opcodes will happen to be mapped to 1, then this code will have some impact but obviously not the intended one.CC @markshannon
The text was updated successfully, but these errors were encountered: