mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
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.
This commit is contained in:
parent
dbdfecebd2
commit
434723f94c
3 changed files with 66 additions and 52 deletions
|
@ -323,14 +323,6 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
|
|||
PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
|
||||
...);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Similar PyObject_CallFunctionObjArgs(), but pass positional arguments
|
||||
as a va_list: list of PyObject* object. */
|
||||
PyAPI_FUNC(PyObject *) _PyObject_VaCallFunctionObjArgs(
|
||||
PyObject *callable,
|
||||
va_list vargs);
|
||||
#endif
|
||||
|
||||
/* Call the method named 'name' of object 'obj' with a variable number of
|
||||
C arguments. The C arguments are provided as PyObject* values, terminated
|
||||
by NULL.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue