Return the result on success. Raise an exception on return NULL on
error. */
- PyAPI_FUNC(PyObject *) _PyObject_FastCall(PyObject *func,
- PyObject **args, int nargs,
- PyObject *kwargs);
+ PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(PyObject *func,
+ PyObject **args, int nargs,
+ PyObject *kwargs);
+
+#define _PyObject_FastCall(func, args, nargs) \
+ _PyObject_FastCallDict((func), (args), (nargs), NULL)
+
+#define _PyObject_CallNoArg(func) \
+ _PyObject_FastCall((func), NULL, 0)
+
+#define _PyObject_CallArg1(func, arg) \
+ _PyObject_FastCall((func), &(arg), 1)
PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *func,
PyObject *result,
/*
Call a callable Python object, callable_object, with
arguments and keywords arguments. The 'args' argument can not be
- NULL, but the 'kw' argument can be NULL.
+ NULL.
*/
PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object,
stack[0] = object;
stack[1] = memo;
- return _PyObject_FastCall(st->deepcopy_obj, stack, 2, NULL);
+ return _PyObject_FastCall(st->deepcopy_obj, stack, 2);
}
*/
stack[0] = x;
stack[1] = y;
- res = _PyObject_FastCall(compare, stack, 2, NULL);
+ res = _PyObject_FastCall(compare, stack, 2);
if (res == NULL) {
return NULL;
}
significantly reduced the number of function calls we do. Thus, the
benefits became marginal at best. */
- result = _PyObject_FastCall(func, &obj, 1, NULL);
+ result = _PyObject_CallArg1(func, obj);
Py_DECREF(obj);
return result;
}
return -1;
if (n == READ_WHOLE_LINE) {
- data = _PyObject_FastCall(self->readline, NULL, 0, NULL);
+ data = _PyObject_CallNoArg(self->readline);
}
else {
PyObject *len;
/* Check for a __reduce__ method. */
reduce_func = _PyObject_GetAttrId(obj, &PyId___reduce__);
if (reduce_func != NULL) {
- reduce_value = _PyObject_FastCall(reduce_func, NULL, 0, NULL);
+ reduce_value = _PyObject_CallNoArg(reduce_func);
}
else {
PyErr_Format(st->PicklingError,
match = pattern_new_match(self, &state, 1);
if (!match)
goto error;
- item = _PyObject_FastCall(filter, &match, 1, NULL);
+ item = _PyObject_CallArg1(filter, match);
Py_DECREF(match);
if (!item)
goto error;
}
PyObject *
-_PyObject_FastCall(PyObject *func, PyObject **args, int nargs, PyObject *kwargs)
+_PyObject_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs)
{
ternaryfunc call;
PyObject *result = NULL;
- /* _PyObject_FastCall() must not be called with an exception set,
+ /* _PyObject_FastCallDict() must not be called with an exception set,
because it may clear it (directly or indirectly) and so the
caller loses its exception */
assert(!PyErr_Occurred());
assert(args != NULL);
if (!PyTuple_Check(args)) {
- result = _PyObject_FastCall(callable, &args, 1, NULL);
+ result = _PyObject_CallArg1(callable, args);
}
else {
result = PyObject_Call(callable, args, NULL);
}
if (!format || !*format) {
- return _PyObject_FastCall(callable, NULL, 0, NULL);
+ return _PyObject_CallNoArg(callable);
}
va_start(va, format);
}
if (!format || !*format) {
- return _PyObject_FastCall(callable, NULL, 0, NULL);
+ return _PyObject_CallNoArg(callable);
}
va_start(va, format);
}
if (!format || !*format) {
- return _PyObject_FastCall(func, NULL, 0, NULL);
+ return _PyObject_CallNoArg(func);
}
if (is_size_t) {
Py_DECREF(writer);
return -1;
}
- result = _PyObject_FastCall(writer, &value, 1, NULL);
+ result = _PyObject_CallArg1(writer, value);
Py_DECREF(value);
Py_DECREF(writer);
if (result == NULL)
return NULL;
}
- result = _PyObject_FastCall(it->it_callable, NULL, 0, NULL);
+ result = _PyObject_CallNoArg(it->it_callable);
if (result != NULL) {
int ok;
Py_DECREF(args);
}
else {
- retval = _PyObject_FastCall(func, NULL, 0, NULL);
+ retval = _PyObject_CallNoArg(func);
}
Py_DECREF(func);
Py_DECREF(args);
}
else {
- retval = _PyObject_FastCall(func, NULL, 0, NULL);
+ retval = _PyObject_CallNoArg(func);
}
Py_DECREF(func);
goto error;
}
- retval = _PyObject_FastCall(func, &ival, 1, NULL);
+ retval = _PyObject_CallArg1(func, ival);
Py_DECREF(func);
Py_DECREF(ival);
return retval;
return -1;
}
if (func != NULL) {
- res = _PyObject_FastCall(func, &value, 1, NULL);
+ res = _PyObject_CallArg1(func, value);
Py_DECREF(func);
if (res != NULL) {
result = PyObject_IsTrue(res);
using_len = 1;
}
- value = _PyObject_FastCall(func, NULL, 0, NULL);
+ value = _PyObject_CallNoArg(func);
if (value == NULL) {
goto error;
}
PyErr_Clear();
Py_RETURN_NOTIMPLEMENTED;
}
- res = _PyObject_FastCall(func, &other, 1, NULL);
+ res = _PyObject_CallArg1(func, other);
Py_DECREF(func);
return res;
}
}
if (func != NULL) {
- res = _PyObject_FastCall(func, NULL, 0, NULL);
+ res = _PyObject_CallNoArg(func);
Py_DECREF(func);
return res;
}
if (args == NULL) {
if (kwargs == NULL) {
- return _PyObject_FastCall(func, NULL, 0, 0);
+ return _PyObject_CallNoArg(func);
}
args = PyTuple_New(0);
stack[2] = f->f_locals == NULL ? Py_None : f->f_locals;
stack[3] = fromlist;
stack[4] = level;
- res = _PyObject_FastCall(import_func, stack, 5, NULL);
+ res = _PyObject_FastCall(import_func, stack, 5);
Py_DECREF(import_func);
return res;
}
stack[0] = exception;
stack[1] = v;
stack[2] = tb;
- result = _PyObject_FastCall(hook, stack, 3, NULL);
+ result = _PyObject_FastCall(hook, stack, 3);
if (result == NULL) {
PyObject *exception2, *v2, *tb2;
if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
stack[2] = (arg != NULL) ? arg : Py_None;
/* call the Python-level function */
- result = _PyObject_FastCall(callback, stack, 3, NULL);
+ result = _PyObject_FastCall(callback, stack, 3);
PyFrame_LocalsToFast(frame, 1);
if (result == NULL) {
if (writer == NULL)
goto error;
- result = _PyObject_FastCall(writer, &unicode, 1, NULL);
+ result = _PyObject_CallArg1(writer, unicode);
if (result == NULL) {
goto error;
} else {