cpython: bb6fd6f021e7 (original) (raw)
Mercurial > cpython
changeset 80857:bb6fd6f021e7
use error label instead of breaking eval loop (closes #16693) [#16693]
Benjamin Peterson benjamin@python.org | |
---|---|
date | Sat, 15 Dec 2012 12:51:05 -0500 |
parents | 16b1fde2275c |
children | 64b5c4a9bb3e |
files | Lib/test/test_builtin.py Python/ceval.c |
diffstat | 2 files changed, 7 insertions(+), 3 deletions(-)[+] [-] Lib/test/test_builtin.py 5 Python/ceval.c 5 |
line wrap: on
line diff
--- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -462,6 +462,11 @@ class BuiltinTest(unittest.TestCase): self.assertRaises(TypeError, eval, ()) self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
class X:[](#l1.7)
def __getitem__(self, key):[](#l1.8)
raise ValueError[](#l1.9)
self.assertRaises(ValueError, eval, "foo", {}, X())[](#l1.10)
+ def test_general_eval(self): # Tests that general mappings can be used for the locals argument
--- a/Python/ceval.c +++ b/Python/ceval.c @@ -2162,9 +2162,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int else { v = PyObject_GetItem(locals, name); if (v == NULL && PyErr_Occurred()) {
if (!PyErr_ExceptionMatches([](#l2.7)
PyExc_KeyError))[](#l2.8)
break;[](#l2.9)
if (!PyErr_ExceptionMatches(PyExc_KeyError))[](#l2.10)
goto error;[](#l2.11) PyErr_Clear();[](#l2.12) }[](#l2.13) }[](#l2.14)