@@ -5501,9 +5501,9 @@ compiler_async_comprehension_generator(struct compiler *c, location loc,
55015501 else {
55025502 /* Sub-iter - calculate on the fly */
55035503 VISIT (c , expr , gen -> iter );
5504+ ADDOP (c , LOC (gen -> iter ), GET_AITER );
55045505 }
55055506 }
5506- ADDOP (c , LOC (gen -> iter ), GET_AITER );
55075507
55085508 USE_LABEL (c , start );
55095509 /* Runtime will push a block here, so we need to account for that */
@@ -5790,6 +5790,19 @@ pop_inlined_comprehension_state(struct compiler *c, location loc,
57905790 return SUCCESS ;
57915791}
57925792
5793+ static inline int
5794+ compiler_comprehension_iter (struct compiler * c , comprehension_ty comp )
5795+ {
5796+ VISIT (c , expr , comp -> iter );
5797+ if (comp -> is_async ) {
5798+ ADDOP (c , LOC (comp -> iter ), GET_AITER );
5799+ }
5800+ else {
5801+ ADDOP (c , LOC (comp -> iter ), GET_ITER );
5802+ }
5803+ return SUCCESS ;
5804+ }
5805+
57935806static int
57945807compiler_comprehension (struct compiler * c , expr_ty e , int type ,
57955808 identifier name , asdl_comprehension_seq * generators , expr_ty elt ,
@@ -5811,7 +5824,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
58115824
58125825 outermost = (comprehension_ty ) asdl_seq_GET (generators , 0 );
58135826 if (is_inlined ) {
5814- if (compiler_visit_expr (c , outermost -> iter ) < 0 ) {
5827+ if (compiler_comprehension_iter (c , outermost ) ) {
58155828 goto error ;
58165829 }
58175830 if (push_inlined_comprehension_state (c , loc , entry , & inline_state )) {
@@ -5897,7 +5910,9 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
58975910 }
58985911 Py_CLEAR (co );
58995912
5900- VISIT (c , expr , outermost -> iter );
5913+ if (compiler_comprehension_iter (c , outermost )) {
5914+ goto error ;
5915+ }
59015916
59025917 ADDOP_I (c , loc , CALL , 0 );
59035918
0 commit comments