Hoist constant expression out of the inner loop.

This commit is contained in:
Raymond Hettinger 2015-10-09 01:34:08 -04:00
parent 5098b58381
commit bd5f0e8c1c

View File

@ -469,6 +469,7 @@ filter_next(filterobject *lz)
PyObject *it = lz->it;
long ok;
PyObject *(*iternext)(PyObject *);
int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
iternext = *Py_TYPE(it)->tp_iternext;
for (;;) {
@ -476,12 +477,11 @@ filter_next(filterobject *lz)
if (item == NULL)
return NULL;
if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
if (checktrue) {
ok = PyObject_IsTrue(item);
} else {
PyObject *good;
good = PyObject_CallFunctionObjArgs(lz->func,
item, NULL);
good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
if (good == NULL) {
Py_DECREF(item);
return NULL;