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,13 +582,19 @@ range_index(rangeobject *r, PyObject *ob)
return NULL; return NULL;
if (contains) { if (contains) {
PyObject *idx, *tmp = PyNumber_Subtract(ob, r->start); PyObject *idx = PyNumber_Subtract(ob, r->start);
if (tmp == NULL) if (idx == NULL) {
return NULL; return NULL;
}
if (r->step == _PyLong_One) {
return idx;
}
/* idx = (ob - r.start) // r.step */ /* idx = (ob - r.start) // r.step */
idx = PyNumber_FloorDivide(tmp, r->step); PyObject *sidx = PyNumber_FloorDivide(idx, r->step);
Py_DECREF(tmp); Py_DECREF(idx);
return idx; return sidx;
} }
/* object is not in the range */ /* object is not in the range */