summaryrefslogtreecommitdiffstats
path: root/Python/ast.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-07-30 06:53:31 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-07-30 06:53:31 (GMT)
commit0d62a062066a4cbc8aabab9c305d60ebf7922c8c (patch)
tree1232a8cb31283a4b4f2ae3a6840de9a57113eb51 /Python/ast.c
parent33c3e29fcec55d552eae9f684447d5f68ae019d7 (diff)
downloadcpython-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.c16
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;