Commit 95c80f84 authored by Tim Peters's avatar Tim Peters

Disallow 'yield' in a 'try' block when there's a 'finally' clause.

Derived from Thomas Wouters's patch on the Iterators list, but doesn't
try to read c->c_block[c->c_nblocks].
parent 1bf198e9
......@@ -2659,10 +2659,20 @@ com_return_stmt(struct compiling *c, node *n)
static void
com_yield_stmt(struct compiling *c, node *n)
{
int i;
REQ(n, yield_stmt); /* 'yield' testlist */
if (!c->c_infunction) {
com_error(c, PyExc_SyntaxError, "'yield' outside function");
}
for (i = 0; i < c->c_nblocks; ++i) {
if (c->c_block[i] == SETUP_FINALLY) {
com_error(c, PyExc_SyntaxError,
"'yield' not allowed in a 'try' block "
"with a 'finally' clause");
return;
}
}
com_node(c, CHILD(n, 1));
com_addbyte(c, YIELD_VALUE);
com_pop(c, 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment