Commit 5b021848 authored by Guido van Rossum's avatar Guido van Rossum

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.
parent d992c2c7
...@@ -1298,18 +1298,9 @@ file_setattr(PyFileObject *f, char *name, PyObject *v) ...@@ -1298,18 +1298,9 @@ file_setattr(PyFileObject *f, char *name, PyObject *v)
} }
static PyObject * static PyObject *
file_getiter(PyFileObject *f) file_getiter(PyObject *f)
{ {
static PyObject *es; return PyObject_CallMethod(f, "xreadlines", "");
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;
} }
PyTypeObject PyFile_Type = { PyTypeObject PyFile_Type = {
...@@ -1339,7 +1330,7 @@ PyTypeObject PyFile_Type = { ...@@ -1339,7 +1330,7 @@ PyTypeObject PyFile_Type = {
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
0, /* tp_weaklistoffset */ 0, /* tp_weaklistoffset */
(getiterfunc)file_getiter, /* tp_iter */ file_getiter, /* tp_iter */
0, /* tp_iternext */ 0, /* tp_iternext */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment