GeezerVison is showing github.com — Set line number on the POP_TOP that follows a RETURN_GENERATOR · Issue #109923 · python/cpython
Set line number on the POP_TOP that follows a RETURN_GENERATOR #109923
Description
Currently the POP_TOP of a generator doesn't get a line number.
If we give it the same line number as the RETURN_GENERATOR and RESUME, that will reduce the size of the line number table.
The missing line number also got in my way while working on #109094.
>>> def f(): yield 42
...
>>> dis.dis(f)
1 0 RETURN_GENERATOR
None 2 POP_TOP
1 4 RESUME 0
6 LOAD_CONST 1 (42)
8 YIELD_VALUE 1
10 RESUME 1
12 POP_TOP
14 RETURN_CONST 0 (None)
None >> 16 CALL_INTRINSIC_1 3 (INTRINSIC_STOPITERATION_ERROR)
18 RERAISE 1
ExceptionTable:
4 to 14 -> 16 [0] lasti
Linked PRs
Reacted by Guido van Rossum and Donghee Na
Activity
markshannon commented on Sep 27, 2023
The POP_TOP always comes before the RESUME, so the line number should never be visible.
I agree it is worth doing in order to reduce the size of the table, but I'm curious how it helped with #109094.
iritkatriel commented on Sep 27, 2023
I'm curious how it helped with #109094.
There's a test that throws into a newly created generator. The instr_ptr points to the POP_TOP and the prev_instr points to the RETURN_GENERATOR so that line number in the traceback was different.
added a commit that references this issue
on Sep 27, 2023gh-109923: set line number on the POP_TOP that follows a RETURN_GENER…
Metadata
Metadata
Development
No branches or pull requestsIssue actions