Speedup the inner loops for dropwhile(), islice(), ifilter(), and
ifilterfalse().
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 517975b..3ad26d5 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -835,10 +835,12 @@
 	PyObject *item, *good;
 	PyObject *it = lz->it;
 	long ok;
+	PyObject *(*iternext)(PyObject *);
 
+	assert(PyIter_Check(it));
+	iternext = *it->ob_type->tp_iternext;
 	for (;;) {
-		assert(PyIter_Check(it));
-		item = (*it->ob_type->tp_iternext)(it);
+		item = iternext(it);
 		if (item == NULL)
 			return NULL;
 		if (lz->start == 1)
@@ -1170,10 +1172,12 @@
 	PyObject *item;
 	PyObject *it = lz->it;
 	long oldnext;
+	PyObject *(*iternext)(PyObject *);
 
+	assert(PyIter_Check(it));
+	iternext = *it->ob_type->tp_iternext;
 	while (lz->cnt < lz->next) {
-		assert(PyIter_Check(it));
-		item = (*it->ob_type->tp_iternext)(it);
+		item = iternext(it);
 		if (item == NULL)
 			return NULL;
 		Py_DECREF(item);
@@ -1182,7 +1186,7 @@
 	if (lz->stop != -1 && lz->cnt >= lz->stop)
 		return NULL;
 	assert(PyIter_Check(it));
-	item = (*it->ob_type->tp_iternext)(it);
+	item = iternext(it);
 	if (item == NULL)
 		return NULL;
 	lz->cnt++;
@@ -1783,10 +1787,12 @@
 	PyObject *item;
 	PyObject *it = lz->it;
 	long ok;
+	PyObject *(*iternext)(PyObject *);
 
+	assert(PyIter_Check(it));
+	iternext = *it->ob_type->tp_iternext;
 	for (;;) {
-		assert(PyIter_Check(it));
-		item = (*it->ob_type->tp_iternext)(it);
+		item = iternext(it);
 		if (item == NULL)
 			return NULL;
 
@@ -1932,10 +1938,12 @@
 	PyObject *item;
 	PyObject *it = lz->it;
 	long ok;
+	PyObject *(*iternext)(PyObject *);
 
+	assert(PyIter_Check(it));
+	iternext = *it->ob_type->tp_iternext;
 	for (;;) {
-		assert(PyIter_Check(it));
-		item = (*it->ob_type->tp_iternext)(it);
+		item = iternext(it);
 		if (item == NULL)
 			return NULL;