diff --git a/Objects/setobject.c b/Objects/setobject.c --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -65,10 +65,10 @@ return entry; while (1) { - if (entry->key == key) - return entry; if (entry->hash == hash && entry->key != dummy) { /* dummy match unlikely */ PyObject *startkey = entry->key; + if (startkey == key) + return entry; Py_INCREF(startkey); cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); @@ -86,10 +86,10 @@ entry = &table[(i + j) & mask]; if (entry->key == NULL) goto found_null; - if (entry->key == key) - return entry; if (entry->hash == hash && entry->key != dummy) { PyObject *startkey = entry->key; + if (startkey == key) + return entry; Py_INCREF(startkey); cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); Py_DECREF(startkey); @@ -145,10 +145,10 @@ return entry; while (1) { - if (entry->key == key - || (entry->hash == hash - && entry->key != dummy /* unlikely */ - && unicode_eq(entry->key, key))) /* likely */ + if (entry->hash == hash + && (entry->key == key + || (entry->key != dummy /* unlikely */ + && unicode_eq(entry->key, key)))) /* likely */ return entry; if (entry->key == dummy && freeslot == NULL) freeslot = entry; @@ -157,10 +157,10 @@ entry = &table[(i + j) & mask]; if (entry->key == NULL) goto found_null; - if (entry->key == key - || (entry->hash == hash - && entry->key != dummy - && unicode_eq(entry->key, key))) + if (entry->hash == hash + && (entry->key == key + || (entry->key != dummy /* unlikely */ + && unicode_eq(entry->key, key)))) /* likely */ return entry; if (entry->key == dummy && freeslot == NULL) freeslot = entry; @@ -196,10 +196,7 @@ size_t j; while (1) { - entry = &table[i & mask]; - if (entry->key == NULL) - goto found_null; - for (j = 1 ; j <= LINEAR_PROBES ; j++) { + for (j = 0 ; j <= LINEAR_PROBES ; j++) { entry = &table[(i + j) & mask]; if (entry->key == NULL) goto found_null;