[Python-checkins] cpython: Use PyObject_CallFunctionObjArgs()

victor.stinner python-checkins at python.org
Fri Dec 9 10:31:58 EST 2016


https://hg.python.org/cpython/rev/4321f833a4e0
changeset: 105555:4321f833a4e0
user: Victor Stinner <victor.stinner at gmail.com>
date: Fri Dec 09 16:22:32 2016 +0100
summary:
 Use PyObject_CallFunctionObjArgs()
Issue #28915: Replace PyObject_CallFunction() with
PyObject_CallFunctionObjArgs() when the format string was only made of "O"
formats, PyObject* arguments.
PyObject_CallFunctionObjArgs() avoids the creation of a temporary tuple and
doesn't have to parse a format string.
files:
 Modules/_elementtree.c | 22 ++++++++++++++--------
 Objects/abstract.c | 2 +-
 Objects/descrobject.c | 2 +-
 3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -2496,11 +2496,13 @@
 attrib = PyDict_New();
 if (!attrib)
 return NULL;
- node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
+ node = PyObject_CallFunctionObjArgs(self->element_factory,
+ tag, attrib, NULL);
 Py_DECREF(attrib);
 }
 else {
- node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib);
+ node = PyObject_CallFunctionObjArgs(self->element_factory,
+ tag, attrib, NULL);
 }
 if (!node) {
 return NULL;
@@ -2977,7 +2979,8 @@
 return;
 }
 }
- res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
+ res = PyObject_CallFunctionObjArgs(self->handle_start,
+ tag, attrib, NULL);
 } else
 res = NULL;
 
@@ -3143,8 +3146,9 @@
 
 /* If the target has a handler for doctype, call it. */
 if (self->handle_doctype) {
- res = PyObject_CallFunction(self->handle_doctype, "OOO",
- doctype_name_obj, pubid_obj, sysid_obj);
+ res = PyObject_CallFunctionObjArgs(self->handle_doctype,
+ doctype_name_obj, pubid_obj,
+ sysid_obj, NULL);
 Py_CLEAR(res);
 }
 else {
@@ -3163,8 +3167,9 @@
 if (!res)
 goto clear;
 Py_DECREF(res);
- res = PyObject_CallFunction(parser_doctype, "OOO",
- doctype_name_obj, pubid_obj, sysid_obj);
+ res = PyObject_CallFunctionObjArgs(parser_doctype,
+ doctype_name_obj, pubid_obj,
+ sysid_obj, NULL);
 Py_CLEAR(res);
 }
 }
@@ -3191,7 +3196,8 @@
 target = PyUnicode_DecodeUTF8(target_in, strlen(target_in), "strict");
 data = PyUnicode_DecodeUTF8(data_in, strlen(data_in), "strict");
 if (target && data) {
- res = PyObject_CallFunction(self->handle_pi, "OO", target, data);
+ res = PyObject_CallFunctionObjArgs(self->handle_pi,
+ target, data, NULL);
 Py_XDECREF(res);
 Py_DECREF(data);
 Py_DECREF(target);
diff --git a/Objects/abstract.c b/Objects/abstract.c
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2549,7 +2549,7 @@
 }
 
 if (nargs == 1 && PyTuple_Check(stack[0])) {
- /* Special cases:
+ /* Special cases for backward compatibility:
 - PyObject_CallFunction(func, "O", tuple) calls func(*tuple)
 - PyObject_CallFunction(func, "(OOO)", arg1, arg2, arg3) calls
 func(*(arg1, arg2, arg3)): func(arg1, arg2, arg3) */
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1454,7 +1454,7 @@
 doc = pold->prop_doc ? pold->prop_doc : Py_None;
 }
 
- new = PyObject_CallFunction(type, "OOOO", get, set, del, doc);
+ new = PyObject_CallFunctionObjArgs(type, get, set, del, doc, NULL);
 Py_DECREF(type);
 if (new == NULL)
 return NULL;
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /