changeset: 102758:7cd479573de9 user: Victor Stinner date: Fri Aug 19 16:44:19 2016 +0200 files: Objects/abstract.c description: 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() diff -r 89e4ad001f3d -r 7cd479573de9 Objects/abstract.c --- a/Objects/abstract.c Fri Aug 19 16:42:42 2016 +0200 +++ b/Objects/abstract.c Fri Aug 19 16:44:19 2016 +0200 @@ -2272,27 +2272,20 @@ 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); } - retval = PyObject_Call(callable, args, NULL); + else { + result = PyObject_Call(callable, args, NULL); + } Py_DECREF(args); - - return retval; + return result; } PyObject *