summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2019-02-21 06:51:52 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2019-02-21 06:51:52 (GMT)
commitef1b88bf57aae93893d55f1b9c9639dbe9cc7786 (patch)
tree8eba1fccd1929209ff0c97067b550e7c6f2d12ad
parentd9bc543cbb9681f77d94864d05e2ba2d353e6de9 (diff)
downloadcpython-ef1b88bf57aae93893d55f1b9c9639dbe9cc7786.zip
cpython-ef1b88bf57aae93893d55f1b9c9639dbe9cc7786.tar.gz
cpython-ef1b88bf57aae93893d55f1b9c9639dbe9cc7786.tar.bz2
bpo-36062: Minor speed-up for list slicing and copying. (GH-11967)
-rw-r--r--Objects/listobject.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index e11a3fd..a08b3b5 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -476,14 +476,6 @@ list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
PyListObject *np;
PyObject **src, **dest;
Py_ssize_t i, len;
- if (ilow < 0)
- ilow = 0;
- else if (ilow > Py_SIZE(a))
- ilow = Py_SIZE(a);
- if (ihigh < ilow)
- ihigh = ilow;
- else if (ihigh > Py_SIZE(a))
- ihigh = Py_SIZE(a);
len = ihigh - ilow;
np = (PyListObject *) list_new_prealloc(len);
if (np == NULL)
@@ -507,6 +499,18 @@ PyList_GetSlice(PyObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
PyErr_BadInternalCall();
return NULL;
}
+ if (ilow < 0) {
+ ilow = 0;
+ }
+ else if (ilow > Py_SIZE(a)) {
+ ilow = Py_SIZE(a);
+ }
+ if (ihigh < ilow) {
+ ihigh = ilow;
+ }
+ else if (ihigh > Py_SIZE(a)) {
+ ihigh = Py_SIZE(a);
+ }
return list_slice((PyListObject *)a, ilow, ihigh);
}