mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
bpo-44622: Set line number of END_ASYNC_FOR to match that of iterator. (GH-27160) (GH-27163)
(cherry picked from commit f333ab0f2e
)
This commit is contained in:
parent
2ce8af3cbc
commit
47695e3c88
2 changed files with 14 additions and 2 deletions
|
@ -906,10 +906,20 @@ if 1:
|
||||||
genexp_lines = [None, 1, 3, 1]
|
genexp_lines = [None, 1, 3, 1]
|
||||||
|
|
||||||
genexp_code = return_genexp.__code__.co_consts[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() ]
|
for (_, _, line) in genexp_code.co_lines() ]
|
||||||
self.assertEqual(genexp_lines, code_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):
|
def test_big_dict_literal(self):
|
||||||
# The compiler has a flushing point in "compiler_dict" that calls compiles
|
# The compiler has a flushing point in "compiler_dict" that calls compiles
|
||||||
|
|
|
@ -2923,7 +2923,9 @@ compiler_async_for(struct compiler *c, stmt_ty s)
|
||||||
/* Except block for __anext__ */
|
/* Except block for __anext__ */
|
||||||
compiler_use_next_block(c, except);
|
compiler_use_next_block(c, except);
|
||||||
|
|
||||||
c->u->u_lineno = -1;
|
/* 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);
|
ADDOP(c, END_ASYNC_FOR);
|
||||||
|
|
||||||
/* `else` block */
|
/* `else` block */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue