summaryrefslogtreecommitdiff
path: root/Objects/abstract.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-01-11 00:07:40 +0100
committerVictor Stinner <victor.stinner@gmail.com>2017-01-11 00:07:40 +0100
commit434723f94cfc27079f5ae91600c8baf384db334e (patch)
treec39d5fdaedb6218a90ce14b17865c59cedaf6bb3 /Objects/abstract.c
parentdbdfecebd2451d8a114da8a0bd0ba9eebcbb6e86 (diff)
downloadcpython-git-434723f94cfc27079f5ae91600c8baf384db334e.tar.gz
call_method() now uses _PyObject_FastCall()
Issue #29233: Replace the inefficient _PyObject_VaCallFunctionObjArgs() with _PyObject_FastCall() in call_method() and call_maybe(). Only a few functions call call_method() and call it with a fixed number of arguments. Avoid the complex and expensive _PyObject_VaCallFunctionObjArgs() function, replace it with an array allocated on the stack with the exact number of argumlents. It reduces the stack consumption, bytes per call, before => after: test_python_call: 1168 => 1152 (-16 B) test_python_getitem: 1344 => 1008 (-336 B) test_python_iterator: 1568 => 1232 (-336 B) Remove the _PyObject_VaCallFunctionObjArgs() function which became useless. Rename it to object_vacall() and make it private.
Diffstat (limited to 'Objects/abstract.c')
-rw-r--r--Objects/abstract.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 8d1eddc093..93bf87fa88 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2700,8 +2700,8 @@ _PyObject_CallMethodId_SizeT(PyObject *obj, _Py_Identifier *name,
return retval;
}
-PyObject *
-_PyObject_VaCallFunctionObjArgs(PyObject *callable, va_list vargs)
+static PyObject *
+object_vacall(PyObject *callable, va_list vargs)
{
PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
PyObject **stack;
@@ -2767,7 +2767,7 @@ PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
}
va_start(vargs, name);
- result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
+ result = object_vacall(callable, vargs);
va_end(vargs);
Py_DECREF(callable);
@@ -2791,7 +2791,7 @@ _PyObject_CallMethodIdObjArgs(PyObject *obj,
}
va_start(vargs, name);
- result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
+ result = object_vacall(callable, vargs);
va_end(vargs);
Py_DECREF(callable);
@@ -2805,7 +2805,7 @@ PyObject_CallFunctionObjArgs(PyObject *callable, ...)
PyObject *result;
va_start(vargs, callable);
- result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
+ result = object_vacall(callable, vargs);
va_end(vargs);
return result;