mirror of
https://github.com/python/cpython.git
synced 2024-11-24 18:34:43 +08:00
bpo-44622: Set line number of END_ASYNC_FOR to match that of iterator. (GH-27160)
This commit is contained in:
parent
b83861f026
commit
f333ab0f2e
@ -943,10 +943,20 @@ if 1:
|
||||
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
|
||||
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_line_number_implicit_return_after_async_for(self):
|
||||
|
||||
async def test(aseq):
|
||||
async for i in aseq:
|
||||
body
|
||||
|
||||
expected_lines = [None, 1, 2, 1]
|
||||
code_lines = [ None if line is None else line-test.__code__.co_firstlineno
|
||||
for (_, _, line) in test.__code__.co_lines() ]
|
||||
self.assertEqual(expected_lines, code_lines)
|
||||
|
||||
def test_big_dict_literal(self):
|
||||
# The compiler has a flushing point in "compiler_dict" that calls compiles
|
||||
|
@ -3002,7 +3002,9 @@ compiler_async_for(struct compiler *c, stmt_ty s)
|
||||
/* Except block for __anext__ */
|
||||
compiler_use_next_block(c, except);
|
||||
|
||||
UNSET_LOC(c);
|
||||
/* Use same line number as the iterator,
|
||||
* as the END_ASYNC_FOR succeeds the `for`, not the body. */
|
||||
SET_LOC(c, s->v.AsyncFor.iter);
|
||||
ADDOP(c, END_ASYNC_FOR);
|
||||
|
||||
/* `else` block */
|
||||
|
Loading…
Reference in New Issue
Block a user