summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-04-08 08:18:14 (GMT)
committerGitHub <noreply@github.com>2017-04-08 08:18:14 (GMT)
commitc26b19d5c7aba51b50a4d7fb5f8291036cb9da24 (patch)
treeafe2017c8c588609b61527577666e340c36fe485 /Objects
parentd0d575a6db8cb3b2a720be9f404af3d754da9a5d (diff)
downloadcpython-c26b19d5c7aba51b50a4d7fb5f8291036cb9da24.zip
cpython-c26b19d5c7aba51b50a4d7fb5f8291036cb9da24.tar.gz
cpython-c26b19d5c7aba51b50a4d7fb5f8291036cb9da24.tar.bz2
Expand the PySlice_GetIndicesEx macro. (#1023) (#1044)
(cherry picked from commit b879fe82e7e5c3f7673c9a7fa4aad42bd05445d8)
Diffstat (limited to 'Objects')
-rw-r--r--Objects/bytearrayobject.c12
-rw-r--r--Objects/bytesobject.c6
-rw-r--r--Objects/listobject.c10
-rw-r--r--Objects/memoryobject.c4
-rw-r--r--Objects/tupleobject.c6
-rw-r--r--Objects/unicodeobject.c5
6 files changed, 23 insertions, 20 deletions
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index d456678..a9c8ca6 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -400,11 +400,11 @@ bytearray_subscript(PyByteArrayObject *self, PyObject *index)
}
else if (PySlice_Check(index)) {
Py_ssize_t start, stop, step, slicelength, cur, i;
- if (PySlice_GetIndicesEx(index,
- PyByteArray_GET_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(index, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = PySlice_AdjustIndices(PyByteArray_GET_SIZE(self),
+ &start, &stop, step);
if (slicelength <= 0)
return PyByteArray_FromStringAndSize("", 0);
@@ -630,11 +630,11 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
}
}
else if (PySlice_Check(index)) {
- if (PySlice_GetIndicesEx(index,
- PyByteArray_GET_SIZE(self),
- &start, &stop, &step, &slicelen) < 0) {
+ if (PySlice_Unpack(index, &start, &stop, &step) < 0) {
return -1;
}
+ slicelen = PySlice_AdjustIndices(PyByteArray_GET_SIZE(self), &start,
+ &stop, step);
}
else {
PyErr_Format(PyExc_TypeError,
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index c95a46d..4c55294 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -1683,11 +1683,11 @@ bytes_subscript(PyBytesObject* self, PyObject* item)
char* result_buf;
PyObject* result;
- if (PySlice_GetIndicesEx(item,
- PyBytes_GET_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = PySlice_AdjustIndices(PyBytes_GET_SIZE(self), &start,
+ &stop, step);
if (slicelength <= 0) {
return PyBytes_FromStringAndSize("", 0);
diff --git a/Objects/listobject.c b/Objects/listobject.c
index cde281a..547bdf0 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2420,10 +2420,11 @@ list_subscript(PyListObject* self, PyObject* item)
PyObject* it;
PyObject **src, **dest;
- if (PySlice_GetIndicesEx(item, Py_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+ step);
if (slicelength <= 0) {
return PyList_New(0);
@@ -2469,10 +2470,11 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelength;
- if (PySlice_GetIndicesEx(item, Py_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return -1;
}
+ slicelength = PySlice_AdjustIndices(Py_SIZE(self), &start, &stop,
+ step);
if (step == 1)
return list_ass_slice(self, start, stop, value);
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index b1798a2..e1ac728 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -2285,10 +2285,10 @@ init_slice(Py_buffer *base, PyObject *key, int dim)
{
Py_ssize_t start, stop, step, slicelength;
- if (PySlice_GetIndicesEx(key, base->shape[dim],
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(key, &start, &stop, &step) < 0) {
return -1;
}
+ slicelength = PySlice_AdjustIndices(base->shape[dim], &start, &stop, step);
if (base->suboffsets == NULL || dim == 0) {
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 52f20f4..0dada74 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -720,11 +720,11 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
PyObject* it;
PyObject **src, **dest;
- if (PySlice_GetIndicesEx(item,
- PyTuple_GET_SIZE(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = PySlice_AdjustIndices(PyTuple_GET_SIZE(self), &start,
+ &stop, step);
if (slicelength <= 0) {
return PyTuple_New(0);
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index a5ae454..949205a 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -13915,10 +13915,11 @@ unicode_subscript(PyObject* self, PyObject* item)
int src_kind, dest_kind;
Py_UCS4 ch, max_char, kind_limit;
- if (PySlice_GetIndicesEx(item, PyUnicode_GET_LENGTH(self),
- &start, &stop, &step, &slicelength) < 0) {
+ if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
return NULL;
}
+ slicelength = PySlice_AdjustIndices(PyUnicode_GET_LENGTH(self),
+ &start, &stop, step);
if (slicelength <= 0) {
_Py_RETURN_UNICODE_EMPTY();