mirror of
https://github.com/python/cpython.git
synced 2025-09-18 14:40:43 +00:00
Implement PEP 380 - 'yield from' (closes #11682)
This commit is contained in:
parent
e51757f6de
commit
1f7ce62bd6
33 changed files with 872 additions and 421 deletions
21
Python/ast.c
21
Python/ast.c
|
@ -2369,13 +2369,24 @@ ast_for_expr(struct compiling *c, const node *n)
|
|||
}
|
||||
return ast_for_binop(c, n);
|
||||
case yield_expr: {
|
||||
node *an = NULL;
|
||||
node *en = NULL;
|
||||
int is_from = 0;
|
||||
expr_ty exp = NULL;
|
||||
if (NCH(n) == 2) {
|
||||
exp = ast_for_testlist(c, CHILD(n, 1));
|
||||
if (NCH(n) > 1)
|
||||
an = CHILD(n, 1); /* yield_arg */
|
||||
if (an) {
|
||||
en = CHILD(an, NCH(an) - 1);
|
||||
if (NCH(an) == 2) {
|
||||
is_from = 1;
|
||||
exp = ast_for_expr(c, en);
|
||||
}
|
||||
else
|
||||
exp = ast_for_testlist(c, en);
|
||||
if (!exp)
|
||||
return NULL;
|
||||
}
|
||||
return Yield(exp, LINENO(n), n->n_col_offset, c->c_arena);
|
||||
return Yield(is_from, exp, LINENO(n), n->n_col_offset, c->c_arena);
|
||||
}
|
||||
case factor:
|
||||
if (NCH(n) == 1) {
|
||||
|
@ -2399,7 +2410,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func)
|
|||
/*
|
||||
arglist: (argument ',')* (argument [',']| '*' test [',' '**' test]
|
||||
| '**' test)
|
||||
argument: [test '='] test [comp_for] # Really [keyword '='] test
|
||||
argument: [test '='] (test) [comp_for] # Really [keyword '='] test
|
||||
*/
|
||||
|
||||
int i, nargs, nkeywords, ngens;
|
||||
|
@ -2693,7 +2704,7 @@ ast_for_flow_stmt(struct compiling *c, const node *n)
|
|||
continue_stmt: 'continue'
|
||||
return_stmt: 'return' [testlist]
|
||||
yield_stmt: yield_expr
|
||||
yield_expr: 'yield' testlist
|
||||
yield_expr: 'yield' testlist | 'yield' 'from' test
|
||||
raise_stmt: 'raise' [test [',' test [',' test]]]
|
||||
*/
|
||||
node *ch;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue