mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-100239: specialize BINARY_OP/SUBSCR for list-slice (#132626)
This commit is contained in:
parent
3831752689
commit
5529213d4e
15 changed files with 552 additions and 354 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue