Issue #26802: Optimized calling a function with *args only positional arguments.

Patch by Joe Jevnik.
This commit is contained in:
Serhiy Storchaka 2016-04-19 23:37:17 +03:00
parent 5bfe0da808
commit 79d6e8de9e
1 changed files with 15 additions and 0 deletions

View File

@ -4890,6 +4890,21 @@ update_star_args(int nstack, int nstar, PyObject *stararg,
{ {
PyObject *callargs, *w; PyObject *callargs, *w;
if (!nstack) {
if (!stararg) {
/* There are no positional arguments on the stack and there is no
sequence to be unpacked. */
return PyTuple_New(0);
}
if (PyTuple_CheckExact(stararg)) {
/* No arguments are passed on the stack and the sequence is not a
tuple subclass so we can just pass the stararg tuple directly
to the function. */
Py_INCREF(stararg);
return stararg;
}
}
callargs = PyTuple_New(nstack + nstar); callargs = PyTuple_New(nstack + nstar);
if (callargs == NULL) { if (callargs == NULL) {
return NULL; return NULL;