changeset: 105551:ef05cc5cc651 user: Victor Stinner date: Fri Dec 09 15:26:00 2016 +0100 files: Modules/_elementtree.c description: Use _PyObject_CallMethodIdObjArgs() in _elementtree Issue #28915: Replace _PyObject_CallMethodId() with _PyObject_CallMethodIdObjArgs() when the format string was only made of "O" formats, PyObject* arguments. _PyObject_CallMethodIdObjArgs() avoids the creation of a temporary tuple and doesn't have to parse a format string. diff -r ceb22b8f6d32 -r ef05cc5cc651 Modules/_elementtree.c --- a/Modules/_elementtree.c Fri Dec 09 15:18:31 2016 +0100 +++ b/Modules/_elementtree.c Fri Dec 09 15:26:00 2016 +0100 @@ -1171,8 +1171,8 @@ if (checkpath(path) || namespaces != Py_None) { _Py_IDENTIFIER(find); - return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_find, "OOO", self, path, namespaces + return _PyObject_CallMethodIdObjArgs( + st->elementpath_obj, &PyId_find, self, path, namespaces, NULL ); } @@ -1216,8 +1216,9 @@ elementtreestate *st = ET_STATE_GLOBAL; if (checkpath(path) || namespaces != Py_None) - return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_findtext, "OOOO", self, path, default_value, namespaces + return _PyObject_CallMethodIdObjArgs( + st->elementpath_obj, &PyId_findtext, + self, path, default_value, namespaces, NULL ); if (!self->extra) { @@ -1271,8 +1272,8 @@ if (checkpath(tag) || namespaces != Py_None) { _Py_IDENTIFIER(findall); - return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_findall, "OOO", self, tag, namespaces + return _PyObject_CallMethodIdObjArgs( + st->elementpath_obj, &PyId_findall, self, tag, namespaces, NULL ); } @@ -1318,8 +1319,8 @@ _Py_IDENTIFIER(iterfind); elementtreestate *st = ET_STATE_GLOBAL; - return _PyObject_CallMethodId( - st->elementpath_obj, &PyId_iterfind, "OOO", self, tag, namespaces); + return _PyObject_CallMethodIdObjArgs( + st->elementpath_obj, &PyId_iterfind, self, tag, namespaces, NULL); } /*[clinic input] @@ -2440,7 +2441,7 @@ } else { PyObject *res; - res = _PyObject_CallMethodId(element, &PyId_append, "O", child); + res = _PyObject_CallMethodIdObjArgs(element, &PyId_append, child, NULL); if (res == NULL) return -1; Py_DECREF(res);