bpo-41902: Micro optimization for range.index if step is 1 (GH-22479)

This commit is contained in:
Dong-hee Na 2020-10-21 11:29:56 +09:00 committed by GitHub
parent 5f22741340
commit c0f22fb8b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 5 deletions

View File

@ -0,0 +1 @@
Micro optimization for range.index if step is 1. Patch by Dong-hee Na.

View File

@ -582,15 +582,21 @@ range_index(rangeobject *r, PyObject *ob)
return NULL;
if (contains) {
PyObject *idx, *tmp = PyNumber_Subtract(ob, r->start);
if (tmp == NULL)
PyObject *idx = PyNumber_Subtract(ob, r->start);
if (idx == NULL) {
return NULL;
/* idx = (ob - r.start) // r.step */
idx = PyNumber_FloorDivide(tmp, r->step);
Py_DECREF(tmp);
}
if (r->step == _PyLong_One) {
return idx;
}
/* idx = (ob - r.start) // r.step */
PyObject *sidx = PyNumber_FloorDivide(idx, r->step);
Py_DECREF(idx);
return sidx;
}
/* object is not in the range */
PyErr_Format(PyExc_ValueError, "%R is not in range", ob);
return NULL;