diff -r 40e291815b35 Objects/dictobject.c --- a/Objects/dictobject.c Mon Sep 19 22:20:13 2016 -0700 +++ b/Objects/dictobject.c Wed Sep 21 02:08:19 2016 +0900 @@ -630,12 +630,9 @@ static Py_ssize_t lookdict_index(PyDictKeysObject *k, Py_hash_t hash, Py_ssize_t index) { - size_t i, perturb; size_t mask = DK_MASK(k); - Py_ssize_t ix; - - i = (size_t)hash & mask; - ix = dk_get_index(k, i); + size_t i = (size_t)hash & mask; + Py_ssize_t ix = dk_get_index(k, i); if (ix == index) { return i; } @@ -643,7 +640,7 @@ return DKIX_EMPTY; } - for (perturb = hash; ; perturb >>= PERTURB_SHIFT) { + for (size_t perturb = hash >> PERTURB_SHIFT; ; perturb >>= PERTURB_SHIFT) { i = mask & ((i << 2) + i + perturb + 1); ix = dk_get_index(k, i); if (ix == index) { @@ -685,31 +682,30 @@ lookdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) { - size_t i, perturb, mask; - Py_ssize_t ix, freeslot; - int cmp; PyDictKeysObject *dk; - PyDictKeyEntry *ep0, *ep; - PyObject *startkey; + PyDictKeyEntry *ep0; + size_t i, mask; top: dk = mp->ma_keys; + ep0 = DK_ENTRIES(dk); mask = DK_MASK(dk); - ep0 = DK_ENTRIES(dk); i = (size_t)hash & mask; - ix = dk_get_index(dk, i); + Py_ssize_t ix = dk_get_index(dk, i); if (ix == DKIX_EMPTY) { if (hashpos != NULL) *hashpos = i; *value_addr = NULL; return DKIX_EMPTY; } + + Py_ssize_t freeslot; if (ix == DKIX_DUMMY) { freeslot = i; } else { - ep = &ep0[ix]; + PyDictKeyEntry *ep = &ep0[ix]; if (ep->me_key == key) { *value_addr = &ep->me_value; if (hashpos != NULL) @@ -717,9 +713,9 @@ return ix; } if (ep->me_key != NULL && ep->me_hash == hash) { - startkey = ep->me_key; + PyObject *startkey = ep->me_key; Py_INCREF(startkey); - cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); + int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); if (cmp < 0) return DKIX_ERROR; @@ -739,7 +735,7 @@ freeslot = -1; } - for (perturb = hash; ; perturb >>= PERTURB_SHIFT) { + for (size_t perturb = hash >> PERTURB_SHIFT; ; perturb >>= PERTURB_SHIFT) { i = ((i << 2) + i + perturb + 1) & mask; ix = dk_get_index(dk, i); if (ix == DKIX_EMPTY) { @@ -754,7 +750,7 @@ freeslot = i; continue; } - ep = &ep0[ix]; + PyDictKeyEntry *ep = &ep0[ix]; if (ep->me_key == key) { if (hashpos != NULL) { *hashpos = i; @@ -763,9 +759,9 @@ return ix; } if (ep->me_hash == hash && ep->me_key != NULL) { - startkey = ep->me_key; + PyObject *startkey = ep->me_key; Py_INCREF(startkey); - cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); + int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); if (cmp < 0) { *value_addr = NULL; @@ -795,9 +791,7 @@ lookdict_unicode(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr, Py_ssize_t *hashpos) { - size_t i, perturb; size_t mask = DK_MASK(mp->ma_keys); - Py_ssize_t ix, freeslot; PyDictKeyEntry *ep, *ep0 = DK_ENTRIES(mp->ma_keys); assert(mp->ma_values == NULL); @@ -809,14 +803,15 @@ mp->ma_keys->dk_lookup = lookdict; return lookdict(mp, key, hash, value_addr, hashpos); } - i = (size_t)hash & mask; - ix = dk_get_index(mp->ma_keys, i); + size_t i = (size_t)hash & mask; + Py_ssize_t ix = dk_get_index(mp->ma_keys, i); if (ix == DKIX_EMPTY) { if (hashpos != NULL) *hashpos = i; *value_addr = NULL; return DKIX_EMPTY; } + Py_ssize_t freeslot; if (ix == DKIX_DUMMY) { freeslot = i; } @@ -833,7 +828,7 @@ freeslot = -1; } - for (perturb = hash; ; perturb >>= PERTURB_SHIFT) { + for (size_t perturb = hash >> PERTURB_SHIFT; ; perturb >>= PERTURB_SHIFT) { i = mask & ((i << 2) + i + perturb + 1); ix = dk_get_index(mp->ma_keys, i); if (ix == DKIX_EMPTY) { @@ -904,7 +899,7 @@ *value_addr = &ep->me_value; return ix; } - for (perturb = hash; ; perturb >>= PERTURB_SHIFT) { + for (perturb = hash >> PERTURB_SHIFT; ; perturb >>= PERTURB_SHIFT) { i = mask & ((i << 2) + i + perturb + 1); ix = dk_get_index(mp->ma_keys, i); assert (ix != DKIX_DUMMY); @@ -970,7 +965,7 @@ *value_addr = &mp->ma_values[ix]; return ix; } - for (perturb = hash; ; perturb >>= PERTURB_SHIFT) { + for (perturb = hash >> PERTURB_SHIFT; ; perturb >>= PERTURB_SHIFT) { i = mask & ((i << 2) + i + perturb + 1); ix = dk_get_index(mp->ma_keys, i); if (ix == DKIX_EMPTY) { @@ -1076,7 +1071,8 @@ mp->ma_keys->dk_lookup = lookdict; i = hash & mask; ix = dk_get_index(mp->ma_keys, i); - for (perturb = hash; ix != DKIX_EMPTY; perturb >>= PERTURB_SHIFT) { + for (perturb = hash >> PERTURB_SHIFT; ix != DKIX_EMPTY; + perturb >>= PERTURB_SHIFT) { i = (i << 2) + i + perturb + 1; ix = dk_get_index(mp->ma_keys, i & mask); } @@ -1201,22 +1197,21 @@ insertdict_clean(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) { - size_t i, perturb; PyDictKeysObject *k = mp->ma_keys; - size_t mask = (size_t)DK_SIZE(k)-1; - PyDictKeyEntry *ep0 = DK_ENTRIES(mp->ma_keys); - PyDictKeyEntry *ep; assert(k->dk_lookup != NULL); assert(value != NULL); assert(key != NULL); assert(PyUnicode_CheckExact(key) || k->dk_lookup == lookdict); - i = hash & mask; - for (perturb = hash; dk_get_index(k, i) != DKIX_EMPTY; - perturb >>= PERTURB_SHIFT) { + + size_t mask = (size_t)DK_SIZE(k)-1; + size_t i = hash & mask; + for (size_t perturb = hash >> PERTURB_SHIFT; + dk_get_index(k, i) != DKIX_EMPTY; perturb >>= PERTURB_SHIFT) { i = mask & ((i << 2) + i + perturb + 1); } - ep = &ep0[k->dk_nentries]; + PyDictKeyEntry *ep0 = DK_ENTRIES(k); + PyDictKeyEntry *ep = &ep0[k->dk_nentries]; assert(ep->me_value == NULL); dk_set_index(k, i, k->dk_nentries); k->dk_nentries++;