]> granicus.if.org Git - python/commitdiff
Issue #27809: PyErr_SetImportError() uses fast call
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 22 Aug 2016 22:04:41 +0000 (00:04 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 22 Aug 2016 22:04:41 +0000 (00:04 +0200)
Python/errors.c

index 956e4fa583ae2f543169b3b0064491a108b3a560..e6285e8b3b9cd3ade00c3886863c068da3776c8b 100644 (file)
@@ -699,18 +699,14 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename(
 PyObject *
 PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
 {
-    PyObject *args, *kwargs, *error;
+    PyObject *kwargs, *error;
 
-    if (msg == NULL)
-        return NULL;
-
-    args = PyTuple_New(1);
-    if (args == NULL)
+    if (msg == NULL) {
         return NULL;
+    }
 
     kwargs = PyDict_New();
     if (kwargs == NULL) {
-        Py_DECREF(args);
         return NULL;
     }
 
@@ -722,22 +718,20 @@ PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
         path = Py_None;
     }
 
-    Py_INCREF(msg);
-    PyTuple_SET_ITEM(args, 0, msg);
-
-    if (PyDict_SetItemString(kwargs, "name", name) < 0)
+    if (PyDict_SetItemString(kwargs, "name", name) < 0) {
         goto done;
-    if (PyDict_SetItemString(kwargs, "path", path) < 0)
+    }
+    if (PyDict_SetItemString(kwargs, "path", path) < 0) {
         goto done;
+    }
 
-    error = PyObject_Call(PyExc_ImportError, args, kwargs);
+    error = _PyObject_FastCallDict(PyExc_ImportError, &msg, 1, kwargs);
     if (error != NULL) {
         PyErr_SetObject((PyObject *)Py_TYPE(error), error);
         Py_DECREF(error);
     }
 
 done:
-    Py_DECREF(args);
     Py_DECREF(kwargs);
     return NULL;
 }