bpo-27867: Expand the PySlice_GetIndicesEx macro. (#1023) (#1046)
(cherry picked from commit b879fe8)
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index f301b13..7edd94c 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -4613,11 +4613,10 @@
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
- if (PySlice_GetIndicesEx((PySliceObject *)item,
- self->b_length, &start, &stop,
- &step, &slicelen) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return -1;
}
+ slicelen = _PySlice_AdjustIndices(self->b_length, &start, &stop, step);
if ((step < 0 && start < stop) ||
(step > 0 && start > stop))
stop = start;
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index d7f75c9..71ffc58 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1334,11 +1334,11 @@
if (!self->extra)
return PyList_New(0);
- if (PySlice_GetIndicesEx((PySliceObject *)item,
- self->extra->length,
- &start, &stop, &step, &slicelen) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelen = _PySlice_AdjustIndices(self->extra->length, &start, &stop,
+ step);
if (slicelen <= 0)
return PyList_New(0);
@@ -1393,11 +1393,11 @@
if (!self->extra)
element_new_extra(self, NULL);
- if (PySlice_GetIndicesEx((PySliceObject *)item,
- self->extra->length,
- &start, &stop, &step, &slicelen) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return -1;
}
+ slicelen = _PySlice_AdjustIndices(self->extra->length, &start, &stop,
+ step);
assert(slicelen <= self->extra->length);
if (value == NULL)
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 9819141..310ce7a 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1701,10 +1701,11 @@
arrayobject* ar;
int itemsize = self->ob_descr->itemsize;
- if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+ step);
if (slicelength <= 0) {
return newarrayobject(&Arraytype, 0, self->ob_descr);
@@ -1772,11 +1773,11 @@
return (*self->ob_descr->setitem)(self, i, value);
}
else if (PySlice_Check(item)) {
- if (PySlice_GetIndicesEx((PySliceObject *)item,
- Py_SIZE(self), &start, &stop,
- &step, &slicelength) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return -1;
}
+ slicelength = _PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+ step);
}
else {
PyErr_SetString(PyExc_TypeError,
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 0dc4805..4f4c959 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -784,10 +784,10 @@
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen;
- if (PySlice_GetIndicesEx((PySliceObject *)item, self->size,
- &start, &stop, &step, &slicelen) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelen = _PySlice_AdjustIndices(self->size, &start, &stop, step);
if (slicelen <= 0)
return PyString_FromStringAndSize("", 0);
@@ -939,11 +939,10 @@
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelen;
- if (PySlice_GetIndicesEx((PySliceObject *)item,
- self->size, &start, &stop,
- &step, &slicelen) < 0) {
+ if (_PySlice_Unpack((PySliceObject *)item, &start, &stop, &step) < 0) {
return -1;
}
+ slicelen = _PySlice_AdjustIndices(self->size, &start, &stop, step);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
"mmap object doesn't support slice deletion");