diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-01-11 00:54:57 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-01-11 00:54:57 +0100 |
commit | 415c5107be9873aba3a0619d7bf5096cfb5b087e (patch) | |
tree | 1957ff37ea6dcc963e9512f31807817a5962a70e /Python/ceval.c | |
parent | 434723f94cfc27079f5ae91600c8baf384db334e (diff) | |
download | cpython-git-415c5107be9873aba3a0619d7bf5096cfb5b087e.tar.gz |
Inline call_function()
Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault() using
Py_LOCAL_INLINE to reduce the stack consumption.
It reduces the stack consumption, bytes per call, before => after:
test_python_call: 1152 => 1040 (-112 B)
test_python_getitem: 1008 => 976 (-32 B)
test_python_iterator: 1232 => 1120 (-112 B)
=> total: 3392 => 3136 (- 256 B)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index cd95642923..f86f6aafdc 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -36,7 +36,7 @@ extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **); typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *); /* Forward declarations */ -static PyObject * call_function(PyObject ***, Py_ssize_t, PyObject *); +Py_LOCAL_INLINE(PyObject *) call_function(PyObject ***, Py_ssize_t, PyObject *); static PyObject * fast_function(PyObject *, PyObject **, Py_ssize_t, PyObject *); static PyObject * do_call_core(PyObject *, PyObject *, PyObject *); @@ -4829,7 +4829,9 @@ if (tstate->use_tracing && tstate->c_profilefunc) { \ x = call; \ } -static PyObject* _Py_HOT_FUNCTION +/* Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault() + to reduce the stack consumption. */ +Py_LOCAL_INLINE(PyObject *) _Py_HOT_FUNCTION call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) { PyObject **pfunc = (*pp_stack) - oparg - 1; |