Use Py_Repr{Enter,Leave} to display recursive lists in finite space.

(Jeremy will hardly recognize his patch :-)
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 8bec8af..29c50f4 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -231,14 +231,25 @@
 	int flags;
 {
 	int i;
+
+	i = Py_ReprEnter((PyObject*)op);
+	if (i != 0) {
+		if (i < 0)
+			return i;
+		fprintf(fp, "[...]");
+		return 0;
+	}
 	fprintf(fp, "[");
 	for (i = 0; i < op->ob_size; i++) {
 		if (i > 0)
 			fprintf(fp, ", ");
-		if (PyObject_Print(op->ob_item[i], fp, 0) != 0)
+		if (PyObject_Print(op->ob_item[i], fp, 0) != 0) {
+			Py_ReprLeave((PyObject *)op);
 			return -1;
+		}
 	}
 	fprintf(fp, "]");
+	Py_ReprLeave((PyObject *)op);
 	return 0;
 }
 
@@ -248,6 +259,13 @@
 {
 	PyObject *s, *comma;
 	int i;
+
+	i = Py_ReprEnter((PyObject*)v);
+	if (i != 0) {
+		if (i > 0)
+			return PyString_FromString("[...]");
+		return NULL;
+	}
 	s = PyString_FromString("[");
 	comma = PyString_FromString(", ");
 	for (i = 0; i < v->ob_size && s != NULL; i++) {
@@ -257,6 +275,7 @@
 	}
 	Py_XDECREF(comma);
 	PyString_ConcatAndDel(&s, PyString_FromString("]"));
+	Py_ReprLeave((PyObject *)v);
 	return s;
 }