[Python-checkins] cpython: import_name() now uses fast call
victor.stinner
python-checkins at python.org
Fri Aug 19 19:50:39 EDT 2016
https://hg.python.org/cpython/rev/0da1ce362d15
changeset: 102783:0da1ce362d15
user: Victor Stinner <victor.stinner at gmail.com>
date: Sat Aug 20 00:44:42 2016 +0200
summary:
import_name() now uses fast call
Issue #27128: import_name() now calls _PyObject_FastCall() to avoid the
creation of a temporary tuple.
files:
Python/ceval.c | 22 +++++++++-------------
1 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -5247,7 +5247,8 @@
import_name(PyFrameObject *f, PyObject *name, PyObject *fromlist, PyObject *level)
{
_Py_IDENTIFIER(__import__);
- PyObject *import_func, *args, *res;
+ PyObject *import_func, *res;
+ PyObject* stack[5];
import_func = _PyDict_GetItemId(f->f_builtins, &PyId___import__);
if (import_func == NULL) {
@@ -5271,18 +5272,13 @@
}
Py_INCREF(import_func);
- args = PyTuple_Pack(5,
- name,
- f->f_globals,
- f->f_locals == NULL ? Py_None : f->f_locals,
- fromlist,
- level);
- if (args == NULL) {
- Py_DECREF(import_func);
- return NULL;
- }
- res = PyEval_CallObject(import_func, args);
- Py_DECREF(args);
+
+ stack[0] = name;
+ stack[1] = f->f_globals;
+ stack[2] = f->f_locals == NULL ? Py_None : f->f_locals;
+ stack[3] = fromlist;
+ stack[4] = level;
+ res = _PyObject_FastCall(import_func, stack, 5, NULL);
Py_DECREF(import_func);
return res;
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list