avoids creating an intermediate tuple for iterable arguments other than
lists or tuples.
In other words, a+=b no longer requires extra memory when b is not a
list or tuple. The list and tuple cases are unchanged.
return 0;
}
-static PyObject *
-list_inplace_concat(PyListObject *self, PyObject *other)
-{
- other = PySequence_Fast(other, "argument to += must be iterable");
- if (!other)
- return NULL;
-
- if (listextend_internal(self, other) < 0)
- return NULL;
-
- Py_INCREF(self);
- return (PyObject *)self;
-}
-
static PyObject *
listextend(PyListObject *self, PyObject *b)
{
return NULL;
}
+static PyObject *
+list_inplace_concat(PyListObject *self, PyObject *other)
+{
+ PyObject *result;
+
+ result = listextend(self, other);
+ if (result == NULL)
+ return result;
+ Py_DECREF(result);
+ Py_INCREF(self);
+ return (PyObject *)self;
+}
+
static PyObject *
listpop(PyListObject *self, PyObject *args)
{