Issue #16546: make ast.YieldFrom argument mandatory.

This commit is contained in:
Mark Dickinson 2012-11-25 14:36:26 +00:00
parent 9982c53c2f
commit ded35aeb9d
7 changed files with 36 additions and 24 deletions

View file

@ -3341,27 +3341,24 @@ 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");
value = (e->kind == YieldFrom_kind) ? e->v.YieldFrom.value : e->v.Yield.value;
if (value) {
VISIT(c, expr, value);
if (e->v.Yield.value) {
VISIT(c, expr, e->v.Yield.value);
}
else {
ADDOP_O(c, LOAD_CONST, Py_None, consts);
}
if (e->kind == YieldFrom_kind) {
ADDOP(c, GET_ITER);
ADDOP_O(c, LOAD_CONST, Py_None, consts);
ADDOP(c, YIELD_FROM);
}
else {
ADDOP(c, YIELD_VALUE);
}
ADDOP(c, YIELD_VALUE);
break;
case YieldFrom_kind:
if (c->u->u_ste->ste_type != FunctionBlock)
return compiler_error(c, "'yield' outside function");
VISIT(c, expr, e->v.YieldFrom.value);
ADDOP(c, GET_ITER);
ADDOP_O(c, LOAD_CONST, Py_None, consts);
ADDOP(c, YIELD_FROM);
break;
}
case Compare_kind:
return compiler_compare(c, e);
case Call_kind: