]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Simplify set entry insertion logic. (GH-19881)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sun, 3 May 2020 11:51:05 +0000 (04:51 -0700)
committerGitHub <noreply@github.com>
Sun, 3 May 2020 11:51:05 +0000 (04:51 -0700)
Objects/setobject.c

index bbe013bcfac748a5a9efb160243cff87a6d03995..df4a0e1e9420e66f64cd6f03d5af9f4bda5efd7e 100644 (file)
@@ -137,7 +137,6 @@ static int
 set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 {
     setentry *table;
-    setentry *freeslot;
     setentry *entry;
     size_t perturb;
     size_t mask;
@@ -158,7 +157,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
     if (entry->key == NULL)
         goto found_unused;
 
-    freeslot = NULL;
     perturb = hash;
 
     while (1) {
@@ -187,14 +185,12 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
                 goto restart;
             mask = so->mask;                 /* help avoid a register spill */
         }
-        else if (entry->hash == -1)
-            freeslot = entry;
 
         if (i + LINEAR_PROBES <= mask) {
             for (j = 0 ; j < LINEAR_PROBES ; j++) {
                 entry++;
                 if (entry->hash == 0 && entry->key == NULL)
-                    goto found_unused_or_dummy;
+                    goto found_unused;
                 if (entry->hash == hash) {
                     PyObject *startkey = entry->key;
                     assert(startkey != dummy);
@@ -216,8 +212,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
                         goto restart;
                     mask = so->mask;
                 }
-                else if (entry->hash == -1)
-                    freeslot = entry;
             }
         }
 
@@ -226,17 +220,9 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 
         entry = &so->table[i];
         if (entry->key == NULL)
-            goto found_unused_or_dummy;
+            goto found_unused;
     }
 
-  found_unused_or_dummy:
-    if (freeslot == NULL)
-        goto found_unused;
-    so->used++;
-    freeslot->key = key;
-    freeslot->hash = hash;
-    return 0;
-
   found_unused:
     so->fill++;
     so->used++;