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
/* 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 */