]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-29304: simplify lookdict_index() function. (GH-2273)
authorINADA Naoki <methane@users.noreply.github.com>
Fri, 23 Jun 2017 06:22:50 +0000 (15:22 +0900)
committerGitHub <noreply@github.com>
Fri, 23 Jun 2017 06:22:50 +0000 (15:22 +0900)
Objects/dictobject.c

index 808f548a90394e3223bf3ed6ebd33d540b73b12d..8712d38104933be52d50e4ac870b0fe798dfa9a3 100644 (file)
@@ -631,29 +631,20 @@ PyDict_New(void)
 static Py_ssize_t
 lookdict_index(PyDictKeysObject *k, Py_hash_t hash, Py_ssize_t index)
 {
-    size_t i;
     size_t mask = DK_MASK(k);
-    Py_ssize_t ix;
+    size_t perturb = (size_t)hash;
+    size_t i = (size_t)hash & mask;
 
-    i = (size_t)hash & mask;
-    ix = dk_get_index(k, i);
-    if (ix == index) {
-        return i;
-    }
-    if (ix == DKIX_EMPTY) {
-        return DKIX_EMPTY;
-    }
-
-    for (size_t perturb = hash;;) {
-        perturb >>= PERTURB_SHIFT;
-        i = mask & ((i << 2) + i + perturb + 1);
-        ix = dk_get_index(k, i);
+    for (;;) {
+        Py_ssize_t ix = dk_get_index(k, i);
         if (ix == index) {
             return i;
         }
         if (ix == DKIX_EMPTY) {
             return DKIX_EMPTY;
         }
+        perturb >>= PERTURB_SHIFT;
+        i = mask & (i*5 + perturb + 1);
     }
     assert(0);          /* NOT REACHED */
     return DKIX_ERROR;