mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Replace PyObject_CallFunction calls with only object args
with PyObject_CallFunctionObjArgs, which is 30% faster.
This commit is contained in:
parent
3b0cae9cc0
commit
684fd0c8ec
8 changed files with 17 additions and 20 deletions
|
@ -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)
|
||||||
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)
|
||||||
&& (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)
|
||||||
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)
|
||||||
(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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue