diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-01-14 13:58:23 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-01-14 13:58:23 (GMT) |
commit | 527c62292675ce6f0528593915900f2d025b0259 (patch) | |
tree | 010c85e5dc0b555d1342040b04fadededc3b3984 /Python/compile.c | |
parent | 91f252b179c4d399f735fedf72e53148e0b057fc (diff) | |
download | cpython-527c62292675ce6f0528593915900f2d025b0259.zip cpython-527c62292675ce6f0528593915900f2d025b0259.tar.gz cpython-527c62292675ce6f0528593915900f2d025b0259.tar.bz2 |
make YieldFrom its own distinct from Yield (closes #13780)
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/Python/compile.c b/Python/compile.c index 4d91f50..b64c800 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -3311,21 +3311,25 @@ compiler_visit_expr(struct compiler *c, expr_ty e) case DictComp_kind: return compiler_dictcomp(c, e); case Yield_kind: + case YieldFrom_kind: { + expr_ty value; if (c->u->u_ste->ste_type != FunctionBlock) return compiler_error(c, "'yield' outside function"); - if (e->v.Yield.value) { - VISIT(c, expr, e->v.Yield.value); + value = (e->kind == YieldFrom_kind) ? e->v.YieldFrom.value : e->v.Yield.value; + if (value) { + VISIT(c, expr, value); } else { ADDOP_O(c, LOAD_CONST, Py_None, consts); } - if (e->v.Yield.is_from) { + if (e->kind == YieldFrom_kind) { ADDOP(c, YIELD_FROM); } else { ADDOP(c, YIELD_VALUE); } break; + } case Compare_kind: return compiler_compare(c, e); case Call_kind: |