diff options
-rw-r--r-- | Lib/test/test_dis.py | 14 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2023-09-26-21-26-54.gh-issue-109923.WO3CHi.rst | 1 | ||||
-rw-r--r-- | Python/flowgraph.c | 6 |
3 files changed, 9 insertions, 12 deletions
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index d104e5d..8ab0e1e 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -524,10 +524,8 @@ async def _asyncwith(c): dis_asyncwith = """\ %4d RETURN_GENERATOR - -None POP_TOP - -%4d RESUME 0 + POP_TOP + RESUME 0 %4d LOAD_FAST 0 (c) BEFORE_ASYNC_WITH @@ -598,7 +596,6 @@ None >> COPY 3 ExceptionTable: 12 rows """ % (_asyncwith.__code__.co_firstlineno, - _asyncwith.__code__.co_firstlineno, _asyncwith.__code__.co_firstlineno + 1, _asyncwith.__code__.co_firstlineno + 2, _asyncwith.__code__.co_firstlineno + 1, @@ -757,10 +754,8 @@ Disassembly of <code object <genexpr> at 0x..., file "%s", line %d>: None COPY_FREE_VARS 1 %4d RETURN_GENERATOR - -None POP_TOP - -%4d RESUME 0 + POP_TOP + RESUME 0 LOAD_FAST 0 (.0) >> FOR_ITER 10 (to 34) STORE_FAST 1 (z) @@ -782,7 +777,6 @@ ExceptionTable: __file__, _h.__code__.co_firstlineno + 3, _h.__code__.co_firstlineno + 3, - _h.__code__.co_firstlineno + 3, ) def load_test(x, y=0): diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-26-21-26-54.gh-issue-109923.WO3CHi.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-26-21-26-54.gh-issue-109923.WO3CHi.rst new file mode 100644 index 0000000..f218459 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-26-21-26-54.gh-issue-109923.WO3CHi.rst @@ -0,0 +1 @@ +Set line number on the ``POP_TOP`` that follows a ``RETURN_GENERATOR``. diff --git a/Python/flowgraph.c b/Python/flowgraph.c index 9c24264..9fe387c 100644 --- a/Python/flowgraph.c +++ b/Python/flowgraph.c @@ -2468,17 +2468,19 @@ insert_prefix_instructions(_PyCompile_CodeUnitMetadata *umd, basicblock *entrybl * of 0. This is because RETURN_GENERATOR pushes an element * with _PyFrame_StackPush before switching stacks. */ + + location loc = LOCATION(umd->u_firstlineno, umd->u_firstlineno, -1, -1); cfg_instr make_gen = { .i_opcode = RETURN_GENERATOR, .i_oparg = 0, - .i_loc = LOCATION(umd->u_firstlineno, umd->u_firstlineno, -1, -1), + .i_loc = loc, .i_target = NULL, }; RETURN_IF_ERROR(basicblock_insert_instruction(entryblock, 0, &make_gen)); cfg_instr pop_top = { .i_opcode = POP_TOP, .i_oparg = 0, - .i_loc = NO_LOCATION, + .i_loc = loc, .i_target = NULL, }; RETURN_IF_ERROR(basicblock_insert_instruction(entryblock, 1, &pop_top)); |