mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Merged revisions 72508 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72508 | benjamin.peterson | 2009-05-09 11:36:39 -0500 (Sat, 09 May 2009) | 1 line convert some more special methods to use _PyObject_LookupSpecial ........
This commit is contained in:
parent
8bc5b68159
commit
a5758c0120
3 changed files with 31 additions and 28 deletions
|
@ -75,7 +75,7 @@ Py_ssize_t
|
|||
_PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
|
||||
{
|
||||
static PyObject *hintstrobj = NULL;
|
||||
PyObject *ro;
|
||||
PyObject *ro, *hintmeth;
|
||||
Py_ssize_t rv;
|
||||
|
||||
/* try o.__len__() */
|
||||
|
@ -89,20 +89,15 @@ _PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
|
|||
PyErr_Clear();
|
||||
}
|
||||
|
||||
/* cache a hashed version of the attribute string */
|
||||
if (hintstrobj == NULL) {
|
||||
hintstrobj = PyUnicode_InternFromString("__length_hint__");
|
||||
if (hintstrobj == NULL)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* try o.__length_hint__() */
|
||||
ro = PyObject_CallMethodObjArgs(o, hintstrobj, NULL);
|
||||
hintmeth = _PyObject_LookupSpecial(o, "__length_hint__", &hintstrobj);
|
||||
if (hintmeth == NULL)
|
||||
return defaultvalue;
|
||||
ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
|
||||
Py_DECREF(hintmeth);
|
||||
if (ro == NULL) {
|
||||
if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
|
||||
!PyErr_ExceptionMatches(PyExc_AttributeError))
|
||||
return -1;
|
||||
PyErr_Clear();
|
||||
if (!PyErr_ExceptionMatches(PyExc_TypeError))
|
||||
return -1;
|
||||
return defaultvalue;
|
||||
}
|
||||
rv = PyLong_Check(ro) ? PyLong_AsSsize_t(ro) : defaultvalue;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue