diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) |
commit | 0d62a062066a4cbc8aabab9c305d60ebf7922c8c (patch) | |
tree | 1232a8cb31283a4b4f2ae3a6840de9a57113eb51 /Python/ast.c | |
parent | 33c3e29fcec55d552eae9f684447d5f68ae019d7 (diff) | |
download | cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.zip cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.gz cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.bz2 |
Patch #1531113: Fix augmented assignment with yield expressions.
Also fix a SystemError when trying to assign to yield expressions.
Diffstat (limited to 'Python/ast.c')
-rw-r--r-- | Python/ast.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/Python/ast.c b/Python/ast.c index 9180fd0..9e8d911 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -387,6 +387,9 @@ set_context(expr_ty e, expr_context_ty ctx, const node *n) case GeneratorExp_kind: expr_name = "generator expression"; break; + case Yield_kind: + expr_name = "yield expression"; + break; case ListComp_kind: expr_name = "list comprehension"; break; @@ -1928,12 +1931,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) operator_ty newoperator; node *ch = CHILD(n, 0); - if (TYPE(ch) == testlist) - expr1 = ast_for_testlist(c, ch); - else - expr1 = Yield(ast_for_expr(c, CHILD(ch, 0)), LINENO(ch), n->n_col_offset, - c->c_arena); - + expr1 = ast_for_testlist(c, ch); if (!expr1) return NULL; /* TODO(nas): Remove duplicated error checks (set_context does it) */ @@ -1942,6 +1940,10 @@ ast_for_expr_stmt(struct compiling *c, const node *n) ast_error(ch, "augmented assignment to generator " "expression not possible"); return NULL; + case Yield_kind: + ast_error(ch, "augmented assignment to yield " + "expression not possible"); + return NULL; case Name_kind: { const char *var_name = PyString_AS_STRING(expr1->v.Name.id); if (var_name[0] == 'N' && !strcmp(var_name, "None")) { @@ -1964,7 +1966,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) if (TYPE(ch) == testlist) expr2 = ast_for_testlist(c, ch); else - expr2 = Yield(ast_for_expr(c, ch), LINENO(ch), ch->n_col_offset, c->c_arena); + expr2 = ast_for_expr(c, ch); if (!expr2) return NULL; |