mirror of
https://github.com/python/cpython.git
synced 2025-07-12 22:05:16 +00:00
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 ........
This commit is contained in:
parent
ee763951dc
commit
10b24e87e5
3 changed files with 44 additions and 2 deletions
|
@ -2189,7 +2189,17 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
|||
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));
|
||||
|
@ -2197,7 +2207,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
|||
Py_DECREF(v);
|
||||
Py_DECREF(w);
|
||||
}
|
||||
Py_DECREF(x);
|
||||
PREDICT(END_FINALLY);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue