A bogus assert in the new listiter code prevented starting Python in a
debug build.  Repaired that, and rewrote other parts to reduce
long-winded casting.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index c2892c6..bd391af 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1819,8 +1819,8 @@
 
 typedef struct {
         PyObject_HEAD
-        long      it_index;
-        PyObject *it_seq;
+        long it_index;
+        PyListObject *it_seq;
 } listiterobject;
 
 PyTypeObject PyListIter_Type;
@@ -1839,7 +1839,7 @@
                 return NULL;
         it->it_index = 0;
         Py_INCREF(seq);
-        it->it_seq = seq;
+        it->it_seq = (PyListObject *)seq;
         _PyObject_GC_TRACK(it);
         return (PyObject *)it;
 }
@@ -1855,7 +1855,7 @@
 static int
 listiter_traverse(listiterobject *it, visitproc visit, void *arg)
 {
-        return visit(it->it_seq, arg);
+        return visit((PyObject *)it->it_seq, arg);
 }
 
 
@@ -1867,16 +1867,18 @@
 }
 
 static PyObject *
-listiter_next(PyObject *it)
+listiter_next(listiterobject *it)
 {
-        PyObject *seq;
+        PyListObject *seq;
         PyObject *item;
 
-        assert(PyList_Check(it));
-        seq = ((listiterobject *)it)->it_seq;
+	assert(it != NULL);
+        seq = it->it_seq;
+        assert(PyList_Check(seq));
 
-        if (((listiterobject *)it)->it_index < PyList_GET_SIZE(seq)) {
-		item = ((PyListObject *)(seq))->ob_item[((listiterobject *)it)->it_index++];
+        if (it->it_index < PyList_GET_SIZE(seq)) {
+		item = PyList_GET_ITEM(seq, it->it_index);
+		++it->it_index;
                 Py_INCREF(item);
                 return item;
         }