[Python-checkins] r46751 - python/trunk/Objects/fileobject.c

georg.brandl python-checkins at python.org
Thu Jun 8 16:50:22 CEST 2006


Author: georg.brandl
Date: Thu Jun  8 16:50:21 2006
New Revision: 46751

Modified:
   python/trunk/Objects/fileobject.c
Log:
Bug #1502805: don't alias file.__exit__ to file.close since the
latter can return something that's true.



Modified: python/trunk/Objects/fileobject.c
==============================================================================
--- python/trunk/Objects/fileobject.c	(original)
+++ python/trunk/Objects/fileobject.c	Thu Jun  8 16:50:21 2006
@@ -1635,6 +1635,20 @@
 	return (PyObject *)f;
 }
 
+static PyObject *
+file_exit(PyFileObject *f, PyObject *args)
+{
+	PyObject *ret = file_close(f);
+	if (!ret)
+		/* If error occurred, pass through */
+		return NULL;
+	Py_DECREF(ret);
+	/* We cannot return the result of close since a true
+	 * value will be interpreted as "yes, swallow the
+	 * exception if one was raised inside the with block". */
+	Py_RETURN_NONE;
+}
+
 PyDoc_STRVAR(readline_doc,
 "readline([size]) -> next line from the file, as a string.\n"
 "\n"
@@ -1722,6 +1736,9 @@
 PyDoc_STRVAR(enter_doc,
 	     "__enter__() -> self.");
 
+PyDoc_STRVAR(exit_doc,
+	     "__exit__(*excinfo) -> None.  Closes the file.");
+
 static PyMethodDef file_methods[] = {
 	{"readline",  (PyCFunction)file_readline, METH_VARARGS, readline_doc},
 	{"read",      (PyCFunction)file_read,     METH_VARARGS, read_doc},
@@ -1740,7 +1757,7 @@
 	{"close",     (PyCFunction)file_close,    METH_NOARGS,  close_doc},
 	{"isatty",    (PyCFunction)file_isatty,   METH_NOARGS,  isatty_doc},
 	{"__enter__", (PyCFunction)file_self,     METH_NOARGS,  enter_doc},
-	{"__exit__",  (PyCFunction)file_close,    METH_VARARGS, close_doc},
+	{"__exit__",  (PyCFunction)file_exit,     METH_VARARGS, exit_doc},
 	{NULL,	      NULL}		/* sentinel */
 };
 


More information about the Python-checkins mailing list