]> granicus.if.org Git - python/commit
call_method() now uses _PyObject_FastCall()
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 10 Jan 2017 23:07:40 +0000 (00:07 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 10 Jan 2017 23:07:40 +0000 (00:07 +0100)
commit434723f94cfc27079f5ae91600c8baf384db334e
treec39d5fdaedb6218a90ce14b17865c59cedaf6bb3
parentdbdfecebd2451d8a114da8a0bd0ba9eebcbb6e86
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.
Include/abstract.h
Objects/abstract.c
Objects/typeobject.c