[Python-checkins] cpython (merge 3.5 -> 3.6): merge 3.5 (#27981)

benjamin.peterson python-checkins at python.org
Tue Sep 13 01:10:17 EDT 2016


https://hg.python.org/cpython/rev/4ac3de437100
changeset:   103737:4ac3de437100
branch:      3.6
parent:      103728:76789ce4598b
parent:      103736:2be31da53dcc
user:        Benjamin Peterson <benjamin at python.org>
date:        Mon Sep 12 22:07:14 2016 -0700
summary:
  merge 3.5 (#27981)

files:
  Parser/tokenizer.c |  32 +++++++++++++++++---------------
  1 files changed, 17 insertions(+), 15 deletions(-)


diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -497,16 +497,12 @@
 static int
 fp_setreadl(struct tok_state *tok, const char* enc)
 {
-    PyObject *readline = NULL, *stream = NULL, *io = NULL;
+    PyObject *readline, *io, *stream;
     _Py_IDENTIFIER(open);
     _Py_IDENTIFIER(readline);
     int fd;
     long pos;
 
-    io = PyImport_ImportModuleNoBlock("io");
-    if (io == NULL)
-        goto cleanup;
-
     fd = fileno(tok->fp);
     /* Due to buffering the file offset for fd can be different from the file
      * position of tok->fp.  If tok->fp was opened in text mode on Windows,
@@ -517,27 +513,33 @@
     if (pos == -1 ||
         lseek(fd, (off_t)(pos > 0 ? pos - 1 : pos), SEEK_SET) == (off_t)-1) {
         PyErr_SetFromErrnoWithFilename(PyExc_OSError, NULL);
-        goto cleanup;
+        return 0;
     }
 
+    io = PyImport_ImportModuleNoBlock("io");
+    if (io == NULL)
+        return 0;
+
     stream = _PyObject_CallMethodId(io, &PyId_open, "isisOOO",
                     fd, "r", -1, enc, Py_None, Py_None, Py_False);
+    Py_DECREF(io);
     if (stream == NULL)
-        goto cleanup;
+        return 0;
 
     readline = _PyObject_GetAttrId(stream, &PyId_readline);
+    Py_DECREF(stream);
+    if (readline == NULL)
+        return 0;
     Py_XSETREF(tok->decoding_readline, readline);
+
     if (pos > 0) {
-        if (PyObject_CallObject(readline, NULL) == NULL) {
-            readline = NULL;
-            goto cleanup;
-        }
+        PyObject *bufobj = PyObject_CallObject(readline, NULL);
+        if (bufobj == NULL)
+            return 0;
+        Py_DECREF(bufobj);
     }
 
-  cleanup:
-    Py_XDECREF(stream);
-    Py_XDECREF(io);
-    return readline != NULL;
+    return 1;
 }
 
 /* Fetch the next byte from TOK. */

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list