@@ -4488,11 +4488,18 @@ codegen_sync_comprehension_generator(compiler *c, location loc,
44884488 switch (type ) {
44894489 case COMP_GENEXP :
44904490 if (elt -> kind == Starred_kind ){
4491+ NEW_JUMP_TARGET_LABEL (c , unpack_start );
4492+ NEW_JUMP_TARGET_LABEL (c , unpack_end );
44914493 VISIT (c , expr , elt -> v .Starred .value );
4492- ADDOP (c , elt_loc , GET_YIELD_FROM_ITER );
4493- ADDOP_LOAD_CONST (c , elt_loc , Py_None );
4494- ADD_YIELD_FROM (c , elt_loc , 0 );
4494+ ADDOP (c , elt_loc , GET_ITER );
4495+ USE_LABEL (c , unpack_start );
4496+ ADDOP_JUMP (c , elt_loc , FOR_ITER , unpack_end );
4497+ ADDOP_YIELD (c , elt_loc );
44954498 ADDOP (c , elt_loc , POP_TOP );
4499+ ADDOP_JUMP (c , NO_LOCATION , JUMP , unpack_start );
4500+ USE_LABEL (c , unpack_end );
4501+ ADDOP (c , NO_LOCATION , END_FOR );
4502+ ADDOP (c , NO_LOCATION , POP_ITER );
44964503 }
44974504 else {
44984505 VISIT (c , expr , elt );
@@ -4621,19 +4628,16 @@ codegen_async_comprehension_generator(compiler *c, location loc,
46214628 switch (type ) {
46224629 case COMP_GENEXP :
46234630 if (elt -> kind == Starred_kind ){
4624- /* ADD_YIELD_FROM won't work here like it does in the
4625- synchronous case, so use an explicit loop to mimic the
4626- bytecode for (z async for y in x for z in y). */
4627- NEW_JUMP_TARGET_LABEL (c , async_unpack_start );
4628- NEW_JUMP_TARGET_LABEL (c , async_unpack_end );
4631+ NEW_JUMP_TARGET_LABEL (c , unpack_start );
4632+ NEW_JUMP_TARGET_LABEL (c , unpack_end );
46294633 VISIT (c , expr , elt -> v .Starred .value );
46304634 ADDOP (c , elt_loc , GET_ITER );
4631- USE_LABEL (c , async_unpack_start );
4632- ADDOP_JUMP (c , elt_loc , FOR_ITER , async_unpack_end );
4635+ USE_LABEL (c , unpack_start );
4636+ ADDOP_JUMP (c , elt_loc , FOR_ITER , unpack_end );
46334637 ADDOP_YIELD (c , elt_loc );
46344638 ADDOP (c , elt_loc , POP_TOP );
4635- ADDOP_JUMP (c , NO_LOCATION , JUMP , async_unpack_start );
4636- USE_LABEL (c , async_unpack_end );
4639+ ADDOP_JUMP (c , NO_LOCATION , JUMP , unpack_start );
4640+ USE_LABEL (c , unpack_end );
46374641 ADDOP (c , NO_LOCATION , END_FOR );
46384642 ADDOP (c , NO_LOCATION , POP_ITER );
46394643 }
0 commit comments