From: Benjamin Peterson Date: Tue, 3 Apr 2012 04:35:36 +0000 (-0400) Subject: merge 3.2 X-Git-Tag: v3.3.0a3~329 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0a9a6363025ba16b1c2041a05e6f33ee408b1bda;p=python merge 3.2 --- 0a9a6363025ba16b1c2041a05e6f33ee408b1bda diff --cc Python/pythonrun.c index f4e7e7b9b2,5a96bae059..b68bf9db06 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@@ -1350,27 -1329,35 +1350,35 @@@ parse_syntax_error(PyObject *err, PyObj { long hold; PyObject *v; - - /* old style errors */ - if (PyTuple_Check(err)) - return PyArg_ParseTuple(err, "O(ziiz)", message, filename, - lineno, offset, text); + _Py_IDENTIFIER(msg); + _Py_IDENTIFIER(filename); + _Py_IDENTIFIER(lineno); + _Py_IDENTIFIER(offset); + _Py_IDENTIFIER(text); - /* new style errors. `err' is an instance */ + *message = NULL; - if (! (v = _PyObject_GetAttrId(err, &PyId_msg))) + /* new style errors. `err' is an instance */ - *message = PyObject_GetAttrString(err, "msg"); ++ *message = _PyObject_GetAttrId(err, &PyId_msg); + if (!*message) goto finally; - *message = v; - if (!(v = _PyObject_GetAttrId(err, &PyId_filename))) - v = PyObject_GetAttrString(err, "filename"); ++ v = _PyObject_GetAttrId(err, &PyId_filename); + if (!v) goto finally; - if (v == Py_None) + if (v == Py_None) { + Py_DECREF(v); *filename = NULL; - else if (! (*filename = _PyUnicode_AsString(v))) - goto finally; + } + else { + *filename = _PyUnicode_AsString(v); + Py_DECREF(v); + if (!*filename) + goto finally; + } - Py_DECREF(v); - if (!(v = _PyObject_GetAttrId(err, &PyId_lineno))) - v = PyObject_GetAttrString(err, "lineno"); ++ v = _PyObject_GetAttrId(err, &PyId_lineno); + if (!v) goto finally; hold = PyLong_AsLong(v); Py_DECREF(v); @@@ -1379,7 -1365,8 +1386,8 @@@ goto finally; *lineno = (int)hold; - if (!(v = _PyObject_GetAttrId(err, &PyId_offset))) - v = PyObject_GetAttrString(err, "offset"); ++ v = _PyObject_GetAttrId(err, &PyId_offset); + if (!v) goto finally; if (v == Py_None) { *offset = -1; @@@ -1394,14 -1379,19 +1400,19 @@@ *offset = (int)hold; } - if (!(v = _PyObject_GetAttrId(err, &PyId_text))) - v = PyObject_GetAttrString(err, "text"); ++ v = _PyObject_GetAttrId(err, &PyId_text); + if (!v) goto finally; - if (v == Py_None) + if (v == Py_None) { + Py_DECREF(v); *text = NULL; - else if (!PyUnicode_Check(v) || - !(*text = _PyUnicode_AsString(v))) - goto finally; - Py_DECREF(v); + } + else { + *text = _PyUnicode_AsString(v); + Py_DECREF(v); + if (!*text) + goto finally; + } return 1; finally: