From: Mark Shannon Date: Mon, 15 Mar 2021 14:24:25 +0000 (+0000) Subject: Mark POP_TOP at end of expression statement as artificial, to conform to PEP 626... X-Git-Tag: v3.10.0a7~151 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c5440937efab6a99d54340c902dfb21e86874bc3;p=thirdparty%2FPython%2Fcpython.git Mark POP_TOP at end of expression statement as artificial, to conform to PEP 626. (GH-24860) --- diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index aa08c97c3ada..591d5bb00b26 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 942614fdab85..ea1bf6bf923a 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; }