Skip to content

broken optimization in gen_close() #111107

Closed
@iritkatriel

Description

@iritkatriel

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions