bpo-44297: Fix missing line number in generator expressions (GH-26801)

* Make sure that line number is set when entering comprehension scope in compiler.
This commit is contained in:
Mark Shannon 2021-06-21 10:55:15 +01:00 committed by GitHub
parent 5d2b3a0d68
commit 82e5c28af7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 972 additions and 953 deletions

View File

@ -895,6 +895,21 @@ if 1:
for (_, _, line) in func.__code__.co_lines() ]
self.assertEqual(lines, code_lines)
def test_line_number_genexp(self):
def return_genexp():
return (1
for
x
in
y)
genexp_lines = [None, 1, 3, 1]
genexp_code = return_genexp.__code__.co_consts[1]
code_lines = [None if line is None else line-return_genexp.__code__.co_firstlineno
for (_, _, line) in genexp_code.co_lines() ]
self.assertEqual(genexp_lines, code_lines)
def test_big_dict_literal(self):
# The compiler has a flushing point in "compiler_dict" that calls compiles

View File

@ -0,0 +1,3 @@
Make sure that the line number is set when entering a comprehension scope.
Ensures that backtraces inclusing generator expressions show the correct
line number.

View File

@ -4900,6 +4900,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
{
goto error;
}
SET_LOC(c, e);
is_async_generator = c->u->u_ste->ste_coroutine;

File diff suppressed because it is too large Load Diff