[3.8] bpo-37233: use _PY_FASTCALL_SMALL_STACK in method_vectorcall (GH-13974)
(cherry picked from commit 988e6aa322
)
Co-authored-by: Jeroen Demeyer <J.Demeyer@UGent.be>
This commit is contained in:
parent
0aefba7f99
commit
c7570d402e
|
@ -64,10 +64,16 @@ method_vectorcall(PyObject *method, PyObject *const *args,
|
|||
Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
|
||||
PyObject **newargs;
|
||||
Py_ssize_t totalargs = nargs + nkwargs;
|
||||
newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
|
||||
if (newargs == NULL) {
|
||||
PyErr_NoMemory();
|
||||
return NULL;
|
||||
PyObject *newargs_stack[_PY_FASTCALL_SMALL_STACK];
|
||||
if (totalargs <= (Py_ssize_t)Py_ARRAY_LENGTH(newargs_stack) - 1) {
|
||||
newargs = newargs_stack;
|
||||
}
|
||||
else {
|
||||
newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
|
||||
if (newargs == NULL) {
|
||||
PyErr_NoMemory();
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
/* use borrowed references */
|
||||
newargs[0] = self;
|
||||
|
@ -77,7 +83,9 @@ method_vectorcall(PyObject *method, PyObject *const *args,
|
|||
memcpy(newargs + 1, args, totalargs * sizeof(PyObject *));
|
||||
}
|
||||
result = _PyObject_Vectorcall(func, newargs, nargs+1, kwnames);
|
||||
PyMem_Free(newargs);
|
||||
if (newargs != newargs_stack) {
|
||||
PyMem_Free(newargs);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue