Skip to content

Commit

Permalink
bpo-44297: Fix missing line number in generator expressions (GH-26821)
Browse files Browse the repository at this point in the history
* Make sure that line number is set when entering comprehension scope in compiler.

(cherry picked from commit 82e5c28)
  • Loading branch information
markshannon authored Jun 21, 2021
1 parent 553e104 commit 7674c83
Show file tree
Hide file tree
Showing 4 changed files with 977 additions and 958 deletions.
15 changes: 15 additions & 0 deletions Lib/test/test_compile.py
Original file line number Diff line number Diff line change
Expand Up @@ -895,6 +895,21 @@ def aug_store_attr():
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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
1 change: 1 addition & 0 deletions Python/compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -4799,6 +4799,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;

Expand Down
Loading

0 comments on commit 7674c83

Please sign in to comment.