From c5440937efab6a99d54340c902dfb21e86874bc3 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 15 Mar 2021 14:24:25 +0000 Subject: [PATCH] Mark POP_TOP at end of expression statement as artificial, to conform to PEP 626. (GH-24860) --- Lib/test/test_compile.py | 8 ++++++++ Python/compile.c | 2 ++ 2 files changed, 10 insertions(+) diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index aa08c97c3ad..591d5bb00b2 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -786,6 +786,14 @@ if 1: self.assertIn('LOAD_', opcodes[0].opname) self.assertEqual('RETURN_VALUE', opcodes[1].opname) + def test_lineno_procedure_call(self): + def call(): + ( + print() + ) + line1 = call.__code__.co_firstlineno + 1 + assert line1 not in [line for (_, _, line) in call.__code__.co_lines()] + def test_lineno_after_implicit_return(self): TRUE = True # Don't use constant True or False, as compiler will remove test diff --git a/Python/compile.c b/Python/compile.c index 942614fdab8..ea1bf6bf923 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -3397,6 +3397,8 @@ compiler_visit_stmt_expr(struct compiler *c, expr_ty value) } VISIT(c, expr, value); + /* Mark POP_TOP as artificial */ + c->u->u_lineno = -1; ADDOP(c, POP_TOP); return 1; }