mirror of
https://github.com/python/cpython.git
synced 2025-11-11 22:55:08 +00:00
Backed out changeset 0e4f26083bbb (PyObject_CallMethodObjArgs)
This commit is contained in:
parent
f0cba67d0b
commit
d48af09043
1 changed files with 32 additions and 71 deletions
|
|
@ -2499,52 +2499,32 @@ _PyObject_CallMethodId_SizeT(PyObject *o, _Py_Identifier *name,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject **
|
static PyObject *
|
||||||
objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size,
|
objargs_mktuple(va_list va)
|
||||||
va_list va, Py_ssize_t *p_nargs)
|
|
||||||
{
|
{
|
||||||
Py_ssize_t i, n;
|
int i, n = 0;
|
||||||
va_list countva;
|
va_list countva;
|
||||||
PyObject **stack;
|
PyObject *result, *tmp;
|
||||||
|
|
||||||
/* Count the number of arguments */
|
Py_VA_COPY(countva, va);
|
||||||
Py_VA_COPY(countva, va);
|
|
||||||
|
|
||||||
n = 0;
|
while (((PyObject *)va_arg(countva, PyObject *)) != NULL)
|
||||||
while (1) {
|
++n;
|
||||||
PyObject *arg = (PyObject *)va_arg(countva, PyObject *);
|
result = PyTuple_New(n);
|
||||||
if (arg == NULL) {
|
if (result != NULL && n > 0) {
|
||||||
break;
|
for (i = 0; i < n; ++i) {
|
||||||
}
|
tmp = (PyObject *)va_arg(va, PyObject *);
|
||||||
n++;
|
PyTuple_SET_ITEM(result, i, tmp);
|
||||||
}
|
Py_INCREF(tmp);
|
||||||
*p_nargs = n;
|
|
||||||
|
|
||||||
/* Copy arguments */
|
|
||||||
if (small_stack_size <= n) {
|
|
||||||
stack = small_stack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
stack = PyMem_Malloc(n * sizeof(PyObject**));
|
|
||||||
if (stack == NULL) {
|
|
||||||
PyErr_NoMemory();
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
for (i = 0; i < n; ++i) {
|
|
||||||
stack[i] = va_arg(va, PyObject *);
|
|
||||||
}
|
|
||||||
return stack;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
|
PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
|
||||||
{
|
{
|
||||||
PyObject *small_stack[5];
|
PyObject *args, *tmp;
|
||||||
PyObject **stack;
|
|
||||||
Py_ssize_t nargs;
|
|
||||||
PyObject *result;
|
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
|
|
||||||
if (callable == NULL || name == NULL) {
|
if (callable == NULL || name == NULL) {
|
||||||
|
|
@ -2557,31 +2537,24 @@ PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
|
||||||
|
|
||||||
/* count the args */
|
/* count the args */
|
||||||
va_start(vargs, name);
|
va_start(vargs, name);
|
||||||
stack = objargs_mkstack(small_stack, Py_ARRAY_LENGTH(small_stack),
|
args = objargs_mktuple(vargs);
|
||||||
vargs, &nargs);
|
|
||||||
va_end(vargs);
|
va_end(vargs);
|
||||||
if (stack == NULL) {
|
if (args == NULL) {
|
||||||
Py_DECREF(callable);
|
Py_DECREF(callable);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
tmp = PyObject_Call(callable, args, NULL);
|
||||||
result = _PyObject_FastCall(callable, stack, nargs);
|
Py_DECREF(args);
|
||||||
Py_DECREF(callable);
|
Py_DECREF(callable);
|
||||||
if (stack != small_stack) {
|
|
||||||
PyMem_Free(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
_PyObject_CallMethodIdObjArgs(PyObject *callable,
|
_PyObject_CallMethodIdObjArgs(PyObject *callable,
|
||||||
struct _Py_Identifier *name, ...)
|
struct _Py_Identifier *name, ...)
|
||||||
{
|
{
|
||||||
PyObject *small_stack[5];
|
PyObject *args, *tmp;
|
||||||
PyObject **stack;
|
|
||||||
Py_ssize_t nargs;
|
|
||||||
PyObject *result;
|
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
|
|
||||||
if (callable == NULL || name == NULL) {
|
if (callable == NULL || name == NULL) {
|
||||||
|
|
@ -2594,30 +2567,23 @@ _PyObject_CallMethodIdObjArgs(PyObject *callable,
|
||||||
|
|
||||||
/* count the args */
|
/* count the args */
|
||||||
va_start(vargs, name);
|
va_start(vargs, name);
|
||||||
stack = objargs_mkstack(small_stack, Py_ARRAY_LENGTH(small_stack),
|
args = objargs_mktuple(vargs);
|
||||||
vargs, &nargs);
|
|
||||||
va_end(vargs);
|
va_end(vargs);
|
||||||
if (stack == NULL) {
|
if (args == NULL) {
|
||||||
Py_DECREF(callable);
|
Py_DECREF(callable);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
tmp = PyObject_Call(callable, args, NULL);
|
||||||
result = _PyObject_FastCall(callable, stack, nargs);
|
Py_DECREF(args);
|
||||||
Py_DECREF(callable);
|
Py_DECREF(callable);
|
||||||
if (stack != small_stack) {
|
|
||||||
PyMem_Free(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyObject_CallFunctionObjArgs(PyObject *callable, ...)
|
PyObject_CallFunctionObjArgs(PyObject *callable, ...)
|
||||||
{
|
{
|
||||||
PyObject *small_stack[5];
|
PyObject *args, *tmp;
|
||||||
PyObject **stack;
|
|
||||||
Py_ssize_t nargs;
|
|
||||||
PyObject *result;
|
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
|
|
||||||
if (callable == NULL) {
|
if (callable == NULL) {
|
||||||
|
|
@ -2626,19 +2592,14 @@ PyObject_CallFunctionObjArgs(PyObject *callable, ...)
|
||||||
|
|
||||||
/* count the args */
|
/* count the args */
|
||||||
va_start(vargs, callable);
|
va_start(vargs, callable);
|
||||||
stack = objargs_mkstack(small_stack, Py_ARRAY_LENGTH(small_stack),
|
args = objargs_mktuple(vargs);
|
||||||
vargs, &nargs);
|
|
||||||
va_end(vargs);
|
va_end(vargs);
|
||||||
if (stack == NULL) {
|
if (args == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
tmp = PyObject_Call(callable, args, NULL);
|
||||||
|
Py_DECREF(args);
|
||||||
|
|
||||||
result = _PyObject_FastCall(callable, stack, nargs);
|
return tmp;
|
||||||
if (stack != small_stack) {
|
|
||||||
PyMem_Free(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue