From: Serhiy Storchaka Date: Mon, 6 Mar 2017 21:39:35 +0000 (+0200) Subject: bpo-29737: Optimize concatenating with empty tuple. (#524) X-Git-Tag: v3.7.0a1~1188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98e80c2babac0003182c3482c6c5437ea111e795;p=python bpo-29737: Optimize concatenating with empty tuple. (#524) --- diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 64db80692f..4c6bbe71a1 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -446,6 +446,10 @@ tupleconcat(PyTupleObject *a, PyObject *bb) Py_ssize_t i; PyObject **src, **dest; PyTupleObject *np; + if (Py_SIZE(a) == 0 && PyTuple_CheckExact(bb)) { + Py_INCREF(bb); + return bb; + } if (!PyTuple_Check(bb)) { PyErr_Format(PyExc_TypeError, "can only concatenate tuple (not \"%.200s\") to tuple", @@ -453,6 +457,10 @@ tupleconcat(PyTupleObject *a, PyObject *bb) return NULL; } #define b ((PyTupleObject *)bb) + if (Py_SIZE(b) == 0 && PyTuple_CheckExact(a)) { + Py_INCREF(a); + return (PyObject *)a; + } if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b)) return PyErr_NoMemory(); size = Py_SIZE(a) + Py_SIZE(b);