Skip to content

Commit 67783c0

Browse files
committed
Fix the symtable and other things.
1 parent 075a6ab commit 67783c0

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

Parser/action_helpers.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,8 @@ _PyPegen_get_expr_name(expr_ty e)
10961096
case Yield_kind:
10971097
case YieldFrom_kind:
10981098
return "yield expression";
1099+
case AsyncYieldFrom_kind:
1100+
return "async yield expression";
10991101
case Await_kind:
11001102
return "await expression";
11011103
case ListComp_kind:

Python/ast_preprocess.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTPreprocessState *state)
575575
case YieldFrom_kind:
576576
CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value);
577577
break;
578+
case AsyncYieldFrom_kind:
579+
CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value);
580+
break;
578581
case Compare_kind:
579582
CALL(astfold_expr, expr_ty, node_->v.Compare.left);
580583
CALL_SEQ(astfold_expr, expr, node_->v.Compare.comparators);

Python/ast_unparse.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,14 @@ append_ast_yield_from(PyUnicodeWriter *writer, expr_ty e)
909909
APPEND_CHAR_FINISH(')');
910910
}
911911

912+
static int
913+
append_ast_async_yield_from(PyUnicodeWriter *writer, expr_ty e)
914+
{
915+
APPEND_STR("(async yield from ");
916+
APPEND_EXPR(e->v.YieldFrom.value, PR_TEST);
917+
APPEND_CHAR_FINISH(')');
918+
}
919+
912920
static int
913921
append_ast_await(PyUnicodeWriter *writer, expr_ty e, int level)
914922
{
@@ -960,6 +968,8 @@ append_ast_expr(PyUnicodeWriter *writer, expr_ty e, int level)
960968
return append_ast_yield(writer, e);
961969
case YieldFrom_kind:
962970
return append_ast_yield_from(writer, e);
971+
case AsyncYieldFrom_kind:
972+
return append_ast_async_yield_from(writer, e);
963973
case Await_kind:
964974
return append_ast_await(writer, e, level);
965975
case Compare_kind:

Python/symtable.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2540,6 +2540,16 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
25402540
return symtable_raise_if_comprehension_block(st, e);
25412541
}
25422542
break;
2543+
case AsyncYieldFrom_kind:
2544+
if (!symtable_raise_if_annotation_block(st, "async yield expression", e)) {
2545+
return 0;
2546+
}
2547+
VISIT(st, expr, e->v.AsyncYieldFrom.value);
2548+
st->st_cur->ste_generator = 1;
2549+
if (st->st_cur->ste_comprehension) {
2550+
return symtable_raise_if_comprehension_block(st, e);
2551+
}
2552+
break;
25432553
case Await_kind:
25442554
if (!symtable_raise_if_annotation_block(st, "await expression", e)) {
25452555
return 0;

0 commit comments

Comments
 (0)