From 5e87749a8eec95e277c0d1ec5f40467cefcb9957 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 19 Aug 2016 18:19:42 +0200 Subject: [PATCH] Issue #27128: slot_sq_item() uses fast call slot_sq_item() now calls _PyObject_FastCall() to avoid the creation of a temporary tuple of 1 item to pass the 'item' argument to the slot function. --- Objects/typeobject.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index ff9f0204e90..364841b0b4b 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5808,7 +5808,7 @@ slot_sq_length(PyObject *self) static PyObject * slot_sq_item(PyObject *self, Py_ssize_t i) { - PyObject *func, *ival = NULL, *args, *retval = NULL; + PyObject *func, *ival = NULL, *retval = NULL; descrgetfunc f; func = _PyType_LookupId(Py_TYPE(self), &PyId___getitem__); @@ -5834,20 +5834,13 @@ slot_sq_item(PyObject *self, Py_ssize_t i) goto error; } - args = PyTuple_New(1); - if (args == NULL) { - goto error; - } - - PyTuple_SET_ITEM(args, 0, ival); - retval = PyObject_Call(func, args, NULL); + retval = _PyObject_FastCall(func, &ival, 1, NULL); Py_DECREF(func); - Py_DECREF(args); + Py_DECREF(ival); return retval; error: Py_DECREF(func); - Py_XDECREF(ival); return NULL; }