diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-03-14 21:37:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-14 21:37:20 +0100 |
commit | 0f7b0b397e12514ee213bc727c9939b66585cbe2 (patch) | |
tree | 786e7994f6128c4cba34a9d20c7d9aa5a96ba566 /Objects/call.c | |
parent | d4914e9041cb9455592facba2a1afa6d905f1c01 (diff) | |
download | cpython-git-0f7b0b397e12514ee213bc727c9939b66585cbe2.tar.gz |
bpo-29735: Optimize partial_call(): avoid tuple (#516)
* Add _PyObject_HasFastCall()
* partial_call() now avoids temporary tuple to pass positional
arguments if the callable supports the FASTCALL calling convention
for positional arguments.
* Fix also a performance regression in partial_call() if the callable
doesn't support FASTCALL.
Diffstat (limited to 'Objects/call.c')
-rw-r--r-- | Objects/call.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Objects/call.c b/Objects/call.c index f1b14080ff..dd022ec6e8 100644 --- a/Objects/call.c +++ b/Objects/call.c @@ -2,6 +2,22 @@ #include "frameobject.h" +int +_PyObject_HasFastCall(PyObject *callable) +{ + if (PyFunction_Check(callable)) { + return 1; + } + else if (PyCFunction_Check(callable)) { + return !(PyCFunction_GET_FLAGS(callable) & METH_VARARGS); + } + else { + assert (PyCallable_Check(callable)); + return 0; + } +} + + static PyObject * null_error(void) { |