Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 59190:a9e1f1d34c96 3.1
Merged revisions 78505-78506 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r78505 | benjamin.peterson | 2010-02-27 11:40:01 -0600 (Sat, 27 Feb 2010) | 1 line
only accept AttributeError as indicating no __prepare__ attribute on a metaclass, allowing lookup errors to propogate
........
r78506 | benjamin.peterson | 2010-02-27 11:41:13 -0600 (Sat, 27 Feb 2010) | 1 line
check PyDict_New() for error
........
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 27 Feb 2010 17:56:22 +0000 |
| parents | ed4d5cd47ee9 |
| children | 030962092373 |
line wrap: on
line diff
--- a/Python/bltinmodule.c Sat Feb 27 16:17:11 2010 +0000 +++ b/Python/bltinmodule.c Sat Feb 27 17:56:22 2010 +0000 @@ -108,8 +108,16 @@ } prep = PyObject_GetAttrString(meta, "__prepare__"); if (prep == NULL) { - PyErr_Clear(); - ns = PyDict_New(); + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + ns = PyDict_New(); + } + else { + Py_DECREF(meta); + Py_XDECREF(mkw); + Py_DECREF(bases); + return NULL; + } } else { PyObject *pargs = PyTuple_Pack(2, name, bases); @@ -123,12 +131,12 @@ ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw); Py_DECREF(pargs); Py_DECREF(prep); - if (ns == NULL) { - Py_DECREF(meta); - Py_XDECREF(mkw); - Py_DECREF(bases); - return NULL; - } + } + if (ns == NULL) { + Py_DECREF(meta); + Py_XDECREF(mkw); + Py_DECREF(bases); + return NULL; } cell = PyObject_CallFunctionObjArgs(func, ns, NULL); if (cell != NULL) {
