gh-100239: specialize BINARY_OP/SUBSCR for list-slice (#132626)

This commit is contained in:
Irit Katriel 2025-05-01 11:28:52 +01:00 committed by GitHub
parent 3831752689
commit 5529213d4e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 552 additions and 354 deletions

View file

@ -3617,6 +3617,24 @@ list_slice_wrap(PyListObject *aa, Py_ssize_t start, Py_ssize_t stop, Py_ssize_t
return res;
}
static inline PyObject*
list_slice_subscript(PyObject* self, PyObject* item)
{
assert(PyList_Check(self));
assert(PySlice_Check(item));
Py_ssize_t start, stop, step;
if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
return list_slice_wrap((PyListObject *)self, start, stop, step);
}
PyObject *
_PyList_SliceSubscript(PyObject* _self, PyObject* item)
{
return list_slice_subscript(_self, item);
}
static PyObject *
list_subscript(PyObject* _self, PyObject* item)
{
@ -3631,11 +3649,7 @@ list_subscript(PyObject* _self, PyObject* item)
return list_item((PyObject *)self, i);
}
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step;
if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
return list_slice_wrap(self, start, stop, step);
return list_slice_subscript(_self, item);
}
else {
PyErr_Format(PyExc_TypeError,