changeset: 102762:5cf9524f2923 user: Victor Stinner date: Fri Aug 19 17:04:54 2016 +0200 files: Objects/abstract.c description: Avoid call_function_tail() for empty format str Issue #27128, PyObject_CallFunction(), _PyObject_FastCall() and callmethod(): if the format string of parameters is empty, avoid the creation of an empty tuple: call _PyObject_FastCall() without parameters. diff -r 10f1a4910adb -r 5cf9524f2923 Objects/abstract.c --- a/Objects/abstract.c Fri Aug 19 16:59:55 2016 +0200 +++ b/Objects/abstract.c Fri Aug 19 17:04:54 2016 +0200 @@ -2324,14 +2324,13 @@ return null_error(); } - if (format && *format) { - va_start(va, format); - args = Py_VaBuildValue(format, va); - va_end(va); + if (!format || !*format) { + return _PyObject_FastCall(callable, NULL, 0, NULL); } - else { - args = PyTuple_New(0); - } + + va_start(va, format); + args = Py_VaBuildValue(format, va); + va_end(va); if (args == NULL) { return NULL; } @@ -2351,14 +2350,13 @@ return null_error(); } - if (format && *format) { - va_start(va, format); - args = _Py_VaBuildValue_SizeT(format, va); - va_end(va); + if (!format || !*format) { + return _PyObject_FastCall(callable, NULL, 0, NULL); } - else { - args = PyTuple_New(0); - } + + va_start(va, format); + args = _Py_VaBuildValue_SizeT(format, va); + va_end(va); if (args == NULL) { return NULL; } @@ -2380,14 +2378,15 @@ return NULL; } - if (format && *format) { - if (is_size_t) - args = _Py_VaBuildValue_SizeT(format, va); - else - args = Py_VaBuildValue(format, va); + if (!format || !*format) { + return _PyObject_FastCall(func, NULL, 0, NULL); + } + + if (is_size_t) { + args = _Py_VaBuildValue_SizeT(format, va); } else { - args = PyTuple_New(0); + args = Py_VaBuildValue(format, va); } if (args == NULL) { return NULL;