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 be frame->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 of YIELD_VALUE) or 241 (opcode of INSTRUMENTED_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
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
StopIterationso 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_depthis 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