call_function_tail() uses fast call
Issue #27128: Modify call_function_tail() to use _PyObject_FastCall() when args is not a tuple to avoid the creation of a temporary tuple. call_function_tail() is used by: * PyObject_CallFunction() * PyObject_CallMethod() * _PyObject_CallMethodId()
This commit is contained in:
parent
3f745bf1d9
commit
8880708f81
|
@ -2272,27 +2272,20 @@ exit:
|
|||
static PyObject*
|
||||
call_function_tail(PyObject *callable, PyObject *args)
|
||||
{
|
||||
PyObject *retval;
|
||||
PyObject *result;
|
||||
|
||||
if (args == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!PyTuple_Check(args)) {
|
||||
PyObject *a;
|
||||
|
||||
a = PyTuple_New(1);
|
||||
if (a == NULL) {
|
||||
Py_DECREF(args);
|
||||
return NULL;
|
||||
}
|
||||
PyTuple_SET_ITEM(a, 0, args);
|
||||
args = a;
|
||||
result = _PyObject_FastCall(callable, &args, 1, NULL);
|
||||
}
|
||||
else {
|
||||
result = PyObject_Call(callable, args, NULL);
|
||||
}
|
||||
retval = PyObject_Call(callable, args, NULL);
|
||||
|
||||
Py_DECREF(args);
|
||||
|
||||
return retval;
|
||||
return result;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
|
|
Loading…
Reference in New Issue