Commit 684fd0c8 authored by Georg Brandl's avatar Georg Brandl

Replace PyObject_CallFunction calls with only object args

with PyObject_CallFunctionObjArgs, which is 30% faster.
parent 3b0cae9c
...@@ -3073,8 +3073,8 @@ find_class(PyObject *py_module_name, PyObject *py_global_name, PyObject *fc) ...@@ -3073,8 +3073,8 @@ find_class(PyObject *py_module_name, PyObject *py_global_name, PyObject *fc)
"pickles are not supported."); "pickles are not supported.");
return NULL; return NULL;
} }
return PyObject_CallFunction(fc, "OO", py_module_name, return PyObject_CallFunctionObjArgs(fc, py_module_name,
py_global_name); py_global_name, NULL);
} }
module = PySys_GetObject("modules"); module = PySys_GetObject("modules");
......
...@@ -603,7 +603,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old) ...@@ -603,7 +603,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
assert(callback != NULL); assert(callback != NULL);
/* copy-paste of weakrefobject.c's handle_callback() */ /* copy-paste of weakrefobject.c's handle_callback() */
temp = PyObject_CallFunction(callback, "O", wr); temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
if (temp == NULL) if (temp == NULL)
PyErr_WriteUnraisable(callback); PyErr_WriteUnraisable(callback);
else else
......
...@@ -3267,8 +3267,8 @@ initparser(void) ...@@ -3267,8 +3267,8 @@ initparser(void)
&& (pickler != NULL)) { && (pickler != NULL)) {
PyObject *res; PyObject *res;
res = PyObject_CallFunction(func, "OOO", &PyST_Type, pickler, res = PyObject_CallFunctionObjArgs(func, &PyST_Type, pickler,
pickle_constructor); pickle_constructor, NULL);
Py_XDECREF(res); Py_XDECREF(res);
} }
Py_XDECREF(func); Py_XDECREF(func);
......
...@@ -81,12 +81,9 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name) ...@@ -81,12 +81,9 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
if (!PyClass_Check(base)) { if (!PyClass_Check(base)) {
if (PyCallable_Check( if (PyCallable_Check(
(PyObject *) base->ob_type)) (PyObject *) base->ob_type))
return PyObject_CallFunction( return PyObject_CallFunctionObjArgs(
(PyObject *) base->ob_type, (PyObject *) base->ob_type,
"OOO", name, bases, dict, NULL);
name,
bases,
dict);
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"PyClass_New: base must be a class"); "PyClass_New: base must be a class");
return NULL; return NULL;
......
...@@ -4641,10 +4641,10 @@ slot_tp_getattr_hook(PyObject *self, PyObject *name) ...@@ -4641,10 +4641,10 @@ slot_tp_getattr_hook(PyObject *self, PyObject *name)
(void *)PyObject_GenericGetAttr)) (void *)PyObject_GenericGetAttr))
res = PyObject_GenericGetAttr(self, name); res = PyObject_GenericGetAttr(self, name);
else else
res = PyObject_CallFunction(getattribute, "OO", self, name); res = PyObject_CallFunctionObjArgs(getattribute, self, name, NULL);
if (res == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) { if (res == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
PyErr_Clear(); PyErr_Clear();
res = PyObject_CallFunction(getattr, "OO", self, name); res = PyObject_CallFunctionObjArgs(getattr, self, name, NULL);
} }
return res; return res;
} }
...@@ -4781,7 +4781,7 @@ slot_tp_descr_get(PyObject *self, PyObject *obj, PyObject *type) ...@@ -4781,7 +4781,7 @@ slot_tp_descr_get(PyObject *self, PyObject *obj, PyObject *type)
obj = Py_None; obj = Py_None;
if (type == NULL) if (type == NULL)
type = Py_None; type = Py_None;
return PyObject_CallFunction(get, "OOO", self, obj, type); return PyObject_CallFunctionObjArgs(get, self, obj, type, NULL);
} }
static int static int
...@@ -5728,8 +5728,8 @@ super_descr_get(PyObject *self, PyObject *obj, PyObject *type) ...@@ -5728,8 +5728,8 @@ super_descr_get(PyObject *self, PyObject *obj, PyObject *type)
if (su->ob_type != &PySuper_Type) if (su->ob_type != &PySuper_Type)
/* If su is an instance of a (strict) subclass of super, /* If su is an instance of a (strict) subclass of super,
call its type */ call its type */
return PyObject_CallFunction((PyObject *)su->ob_type, return PyObject_CallFunctionObjArgs((PyObject *)su->ob_type,
"OO", su->type, obj); su->type, obj, NULL);
else { else {
/* Inline the common case */ /* Inline the common case */
PyTypeObject *obj_type = supercheck(su->type, obj); PyTypeObject *obj_type = supercheck(su->type, obj);
......
...@@ -851,7 +851,7 @@ PyWeakref_GetObject(PyObject *ref) ...@@ -851,7 +851,7 @@ PyWeakref_GetObject(PyObject *ref)
static void static void
handle_callback(PyWeakReference *ref, PyObject *callback) handle_callback(PyWeakReference *ref, PyObject *callback)
{ {
PyObject *cbresult = PyObject_CallFunction(callback, "O", ref); PyObject *cbresult = PyObject_CallFunctionObjArgs(callback, ref, NULL);
if (cbresult == NULL) if (cbresult == NULL)
PyErr_WriteUnraisable(callback); PyErr_WriteUnraisable(callback);
......
...@@ -4053,7 +4053,7 @@ build_class(PyObject *methods, PyObject *bases, PyObject *name) ...@@ -4053,7 +4053,7 @@ build_class(PyObject *methods, PyObject *bases, PyObject *name)
metaclass = (PyObject *) &PyClass_Type; metaclass = (PyObject *) &PyClass_Type;
Py_INCREF(metaclass); Py_INCREF(metaclass);
} }
result = PyObject_CallFunction(metaclass, "OOO", name, bases, methods); result = PyObject_CallFunctionObjArgs(metaclass, name, bases, methods, NULL);
Py_DECREF(metaclass); Py_DECREF(metaclass);
if (result == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) { if (result == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
/* A type error here likely means that the user passed /* A type error here likely means that the user passed
......
...@@ -1043,7 +1043,7 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks, ...@@ -1043,7 +1043,7 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
PyObject *hook = PyList_GetItem(path_hooks, j); PyObject *hook = PyList_GetItem(path_hooks, j);
if (hook == NULL) if (hook == NULL)
return NULL; return NULL;
importer = PyObject_CallFunction(hook, "O", p); importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
if (importer != NULL) if (importer != NULL)
break; break;
...@@ -2499,8 +2499,8 @@ PyImport_Import(PyObject *module_name) ...@@ -2499,8 +2499,8 @@ PyImport_Import(PyObject *module_name)
goto err; goto err;
/* Call the _import__ function with the proper argument list */ /* Call the _import__ function with the proper argument list */
r = PyObject_CallFunction(import, "OOOO", r = PyObject_CallFunctionObjArgs(import, module_name, globals,
module_name, globals, globals, silly_list); globals, silly_list, NULL);
err: err:
Py_XDECREF(globals); Py_XDECREF(globals);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment