File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -906,10 +906,20 @@ def return_genexp():
906
906
genexp_lines = [None , 1 , 3 , 1 ]
907
907
908
908
genexp_code = return_genexp .__code__ .co_consts [1 ]
909
- code_lines = [None if line is None else line - return_genexp .__code__ .co_firstlineno
909
+ code_lines = [ None if line is None else line - return_genexp .__code__ .co_firstlineno
910
910
for (_ , _ , line ) in genexp_code .co_lines () ]
911
911
self .assertEqual (genexp_lines , code_lines )
912
912
913
+ def test_line_number_implicit_return_after_async_for (self ):
914
+
915
+ async def test (aseq ):
916
+ async for i in aseq :
917
+ body
918
+
919
+ expected_lines = [None , 1 , 2 , 1 ]
920
+ code_lines = [ None if line is None else line - test .__code__ .co_firstlineno
921
+ for (_ , _ , line ) in test .__code__ .co_lines () ]
922
+ self .assertEqual (expected_lines , code_lines )
913
923
914
924
def test_big_dict_literal (self ):
915
925
# The compiler has a flushing point in "compiler_dict" that calls compiles
Original file line number Diff line number Diff line change @@ -2923,7 +2923,9 @@ compiler_async_for(struct compiler *c, stmt_ty s)
2923
2923
/* Except block for __anext__ */
2924
2924
compiler_use_next_block (c , except );
2925
2925
2926
- c -> u -> u_lineno = -1 ;
2926
+ /* Use same line number as the iterator,
2927
+ * as the END_ASYNC_FOR succeeds the `for`, not the body. */
2928
+ SET_LOC (c , s -> v .AsyncFor .iter );
2927
2929
ADDOP (c , END_ASYNC_FOR );
2928
2930
2929
2931
/* `else` block */
You can’t perform that action at this time.
0 commit comments