Merge 3.4 (generator)

This commit is contained in:
Victor Stinner 2015-01-31 11:08:40 +01:00
commit 13a1c6022b
3 changed files with 119 additions and 3 deletions

View file

@ -1189,8 +1189,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
f->f_executing = 1;
if (co->co_flags & CO_GENERATOR && !throwflag) {
if (f->f_exc_type != NULL && f->f_exc_type != Py_None) {
if (co->co_flags & CO_GENERATOR) {
if (!throwflag && f->f_exc_type != NULL && f->f_exc_type != Py_None) {
/* We were in an except handler when we left,
restore the exception state which was put aside
(see YIELD_VALUE). */
@ -3196,7 +3196,8 @@ fast_block_end:
|| (retval == NULL && PyErr_Occurred()));
fast_yield:
if (co->co_flags & CO_GENERATOR && (why == WHY_YIELD || why == WHY_RETURN)) {
if (co->co_flags & CO_GENERATOR) {
/* The purpose of this block is to put aside the generator's exception
state and restore that of the calling frame. If the current
exception state is from the caller, we clear the exception values