From 98e80c2babac0003182c3482c6c5437ea111e795 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 6 Mar 2017 23:39:35 +0200 Subject: [PATCH] bpo-29737: Optimize concatenating with empty tuple. (#524) --- Objects/tupleobject.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 64db80692f0..4c6bbe71a19 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);