Avoid inefficient way to call functions without argument

Don't pass "()" format to PyObject_CallXXX() to call a function without
argument: pass NULL as the format string instead. It avoids to have to parse a
string to produce 0 argument.
This commit is contained in:
Victor Stinner 2016-09-05 17:53:15 -07:00
parent ca08301ae0
commit ad8c83ad6b
5 changed files with 11 additions and 11 deletions

View File

@ -2009,7 +2009,7 @@ defdict_reduce(defdictobject *dd)
args = PyTuple_Pack(1, dd->default_factory);
if (args == NULL)
return NULL;
items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, "()");
items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, NULL);
if (items == NULL) {
Py_DECREF(args);
return NULL;

View File

@ -1378,7 +1378,7 @@ time_time(void)
if (time != NULL) {
_Py_IDENTIFIER(time);
result = _PyObject_CallMethodId(time, &PyId_time, "()");
result = _PyObject_CallMethodId(time, &PyId_time, NULL);
Py_DECREF(time);
}
return result;
@ -2703,7 +2703,7 @@ date_isoformat(PyDateTime_Date *self)
static PyObject *
date_str(PyDateTime_Date *self)
{
return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL);
}
@ -2729,7 +2729,7 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw)
&format))
return NULL;
tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, "()");
tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, NULL);
if (tuple == NULL)
return NULL;
result = wrap_strftime((PyObject *)self, format, tuple,
@ -3675,7 +3675,7 @@ time_repr(PyDateTime_Time *self)
static PyObject *
time_str(PyDateTime_Time *self)
{
return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL);
}
static PyObject *

View File

@ -2873,7 +2873,7 @@ save_dict(PicklerObject *self, PyObject *obj)
} else {
_Py_IDENTIFIER(items);
items = _PyObject_CallMethodId(obj, &PyId_items, "()");
items = _PyObject_CallMethodId(obj, &PyId_items, NULL);
if (items == NULL)
goto error;
iter = PyObject_GetIter(items);

View File

@ -5758,7 +5758,7 @@ static PyObject * \
FUNCNAME(PyObject *self) \
{ \
_Py_static_string(id, OPSTR); \
return call_method(self, &id, "()"); \
return call_method(self, &id, NULL); \
}
#define SLOT1(FUNCNAME, OPSTR, ARG1TYPE, ARGCODES) \
@ -5851,7 +5851,7 @@ FUNCNAME(PyObject *self, ARG1TYPE arg1, ARG2TYPE arg2) \
static Py_ssize_t
slot_sq_length(PyObject *self)
{
PyObject *res = call_method(self, &PyId___len__, "()");
PyObject *res = call_method(self, &PyId___len__, NULL);
Py_ssize_t len;
if (res == NULL)
@ -6065,7 +6065,7 @@ static PyObject *
slot_nb_index(PyObject *self)
{
_Py_IDENTIFIER(__index__);
return call_method(self, &PyId___index__, "()");
return call_method(self, &PyId___index__, NULL);
}
@ -6351,7 +6351,7 @@ static PyObject *
slot_tp_iternext(PyObject *self)
{
_Py_IDENTIFIER(__next__);
return call_method(self, &PyId___next__, "()");
return call_method(self, &PyId___next__, NULL);
}
static PyObject *

View File

@ -468,7 +468,7 @@ va_build_value(const char *format, va_list va, int flags)
int n = countformat(f, '\0');
va_list lva;
Py_VA_COPY(lva, va);
Py_VA_COPY(lva, va);
if (n < 0)
return NULL;