Skip to content

Commit 4f6ff3e

Browse files
committed
Revert "change unpacking semantics for genexps: no delegation"
This reverts commit a2b7a69.
1 parent a2b7a69 commit 4f6ff3e

1 file changed

Lines changed: 12 additions & 16 deletions

File tree

Python/codegen.c

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4488,18 +4488,11 @@ 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);
44934491
VISIT(c, expr, elt->v.Starred.value);
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);
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);
44984495
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);
45034496
}
45044497
else{
45054498
VISIT(c, expr, elt);
@@ -4628,16 +4621,19 @@ codegen_async_comprehension_generator(compiler *c, location loc,
46284621
switch (type) {
46294622
case COMP_GENEXP:
46304623
if (elt->kind == Starred_kind){
4631-
NEW_JUMP_TARGET_LABEL(c, unpack_start);
4632-
NEW_JUMP_TARGET_LABEL(c, unpack_end);
4624+
/* async generators don't support `yield from`, so use an
4625+
explicit loop to mimic the bytecode for (z async for y in x for
4626+
z in y). */
4627+
NEW_JUMP_TARGET_LABEL(c, async_unpack_start);
4628+
NEW_JUMP_TARGET_LABEL(c, async_unpack_end);
46334629
VISIT(c, expr, elt->v.Starred.value);
46344630
ADDOP(c, elt_loc, GET_ITER);
4635-
USE_LABEL(c, unpack_start);
4636-
ADDOP_JUMP(c, elt_loc, FOR_ITER, unpack_end);
4631+
USE_LABEL(c, async_unpack_start);
4632+
ADDOP_JUMP(c, elt_loc, FOR_ITER, async_unpack_end);
46374633
ADDOP_YIELD(c, elt_loc);
46384634
ADDOP(c, elt_loc, POP_TOP);
4639-
ADDOP_JUMP(c, NO_LOCATION, JUMP, unpack_start);
4640-
USE_LABEL(c, unpack_end);
4635+
ADDOP_JUMP(c, NO_LOCATION, JUMP, async_unpack_start);
4636+
USE_LABEL(c, async_unpack_end);
46414637
ADDOP(c, NO_LOCATION, END_FOR);
46424638
ADDOP(c, NO_LOCATION, POP_ITER);
46434639
}

0 commit comments

Comments
 (0)