Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 50105:26518d41a186 3.0
Merged revisions 67689 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r67689 | amaury.forgeotdarc | 2008-12-11 00:49:33 +0100 (jeu., 11 déc. 2008) | 13 lines
Merged revisions 67688 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r67688 | amaury.forgeotdarc | 2008-12-11 00:22:49 +0100 (jeu., 11 déc. 2008) | 6 lines
#4559: When a context manager's __exit__() method returns an object whose
conversion to bool raises an exception, 'with' loses that exception.
Reviewed by Jeffrey Yasskin.
Already ported to 2.5, will port to 2.6 and 3.0
........
................
| author | Amaury Forgeot d'Arc <amauryfa@gmail.com> |
|---|---|
| date | Wed, 10 Dec 2008 23:55:09 +0000 |
| parents | 22ab106e3186 |
| children | fb2456a36a83 |
line wrap: on
line diff
--- a/Python/ceval.c Mon Dec 08 19:21:22 2008 +0000 +++ b/Python/ceval.c Wed Dec 10 23:55:09 2008 +0000 @@ -2181,7 +2181,17 @@ Py_DECREF(exit_func); if (x == NULL) break; /* Go to error exit */ - if (u != Py_None && PyObject_IsTrue(x)) { + + if (u != Py_None) + err = PyObject_IsTrue(x); + else + err = 0; + Py_DECREF(x); + + if (err < 0) + break; /* Go to error exit */ + else if (err > 0) { + err = 0; /* There was an exception and a True return */ STACKADJ(-2); SET_TOP(PyLong_FromLong((long) WHY_SILENCED)); @@ -2189,7 +2199,6 @@ Py_DECREF(v); Py_DECREF(w); } - Py_DECREF(x); PREDICT(END_FINALLY); break; }
