diff Objects/fileobject.c @ 17911:fbffb6de25dd legacy-trunk

file_getiter(): make iter(file) be equivalent to file.xreadlines(). This should be faster. This means: (1) "for line in file:" won't work if the xreadlines module can't be imported. (2) The body of "for line in file:" shouldn't use the file directly; the effects (e.g. of file.readline(), file.seek() or even file.tell()) would be undefined because of the buffering that goes on in the xreadlines module.
author Guido van Rossum <guido@python.org>
date Tue, 22 May 2001 16:48:37 +0000
parents aac65f50df6f
children f8bd14aef4d6
line wrap: on
line diff
--- a/Objects/fileobject.c	Tue May 22 16:44:33 2001 +0000
+++ b/Objects/fileobject.c	Tue May 22 16:48:37 2001 +0000
@@ -1298,18 +1298,9 @@
 }
 
 static PyObject *
-file_getiter(PyFileObject *f)
+file_getiter(PyObject *f)
 {
-	static PyObject *es;
-	PyObject *iter;
-	PyObject *rl = Py_FindMethod(file_methods, (PyObject *)f, "readline");
-	if (rl == NULL)
-		return NULL;
-	if (es == NULL)
-		es = PyString_FromString("");
-	iter = PyCallIter_New(rl, es);
-	Py_DECREF(rl);
-	return iter;
+	return PyObject_CallMethod(f, "xreadlines", "");
 }
 
 PyTypeObject PyFile_Type = {
@@ -1339,7 +1330,7 @@
  	0,					/* tp_clear */
 	0,					/* tp_richcompare */
 	0,					/* tp_weaklistoffset */
-	(getiterfunc)file_getiter,		/* tp_iter */
+	file_getiter,				/* tp_iter */
 	0,					/* tp_iternext */
 };