[Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.112,2.113

Guido van Rossum gvanrossum@users.sourceforge.net
Tue, 22 May 2001 09:48:39 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv7544

Modified Files:
	fileobject.c 
Log Message:
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.


Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.112
retrieving revision 2.113
diff -C2 -r2.112 -r2.113
*** fileobject.c	2001/04/23 14:08:49	2.112
--- fileobject.c	2001/05/22 16:48:37	2.113
***************
*** 1299,1314 ****
  
  static PyObject *
! file_getiter(PyFileObject *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;
  }
  
--- 1299,1305 ----
  
  static PyObject *
! file_getiter(PyObject *f)
  {
! 	return PyObject_CallMethod(f, "xreadlines", "");
  }
  
***************
*** 1340,1344 ****
  	0,					/* tp_richcompare */
  	0,					/* tp_weaklistoffset */
! 	(getiterfunc)file_getiter,		/* tp_iter */
  	0,					/* tp_iternext */
  };
--- 1331,1335 ----
  	0,					/* tp_richcompare */
  	0,					/* tp_weaklistoffset */
! 	file_getiter,				/* tp_iter */
  	0,					/* tp_iternext */
  };