Issue #19369: Optimized the usage of __length_hint__().

This commit is contained in:
Serhiy Storchaka 2013-10-24 23:19:51 +03:00
parent 8b150ecfc9
commit f740d467bf
2 changed files with 12 additions and 8 deletions

View File

@ -10,6 +10,8 @@ Projected release date: 2013-11-24
Core and Builtins
-----------------
- Issue #19369: Optimized the usage of __length_hint__().
- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Python executable and not removed by the linker's optimizer.

View File

@ -82,15 +82,17 @@ PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
PyObject *hint, *result;
Py_ssize_t res;
_Py_IDENTIFIER(__length_hint__);
res = PyObject_Length(o);
if (res < 0 && PyErr_Occurred()) {
if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
return -1;
if (_PyObject_HasLen(o)) {
res = PyObject_Length(o);
if (res < 0 && PyErr_Occurred()) {
if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
return -1;
}
PyErr_Clear();
}
else {
return res;
}
PyErr_Clear();
}
else {
return res;
}
hint = _PyObject_LookupSpecial(o, &PyId___length_hint__);
if (hint == NULL) {