]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Bug #1502805: don't alias file.__exit__ to file.close since the
authorGeorg Brandl <georg@python.org>
Thu, 8 Jun 2006 14:50:21 +0000 (14:50 +0000)
committerGeorg Brandl <georg@python.org>
Thu, 8 Jun 2006 14:50:21 +0000 (14:50 +0000)
latter can return something that's true.

Objects/fileobject.c

index 29a5d4a197655b8dcfaf02b06b5042e7bef81830..5e7f4619e138b79f82c2c30ca548276633b81bc5 100644 (file)
@@ -1635,6 +1635,20 @@ file_self(PyFileObject *f)
        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(isatty_doc,
 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 @@ static PyMethodDef file_methods[] = {
        {"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 */
 };