summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-12-10 23:55:09 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-12-10 23:55:09 (GMT)
commitd8d8253dea866f7681ac8094778f982c0983ed16 (patch)
tree91794c3581231fe9bbb1f84009c3585813637ee9 /Python
parent25f43aaa3bd1d5572614aff1a47b32cc5f40c337 (diff)
downloadcpython-d8d8253dea866f7681ac8094778f982c0983ed16.zip
cpython-d8d8253dea866f7681ac8094778f982c0983ed16.tar.gz
cpython-d8d8253dea866f7681ac8094778f982c0983ed16.tar.bz2
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 ........ ................
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index dc4276b..f58a55d 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2181,7 +2181,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));
@@ -2189,7 +2199,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Py_DECREF(v);
Py_DECREF(w);
}
- Py_DECREF(x);
PREDICT(END_FINALLY);
break;
}