From: Raymond Hettinger Date: Sun, 21 Jun 2015 04:39:51 +0000 (-0700) Subject: Restore quick exit (no freeslot check) for common case (found null on first probe). X-Git-Tag: v3.6.0a1~2064 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6ee588f14e23206db3c927653956fd35f6ca857a;p=python Restore quick exit (no freeslot check) for common case (found null on first probe). --- diff --git a/Objects/setobject.c b/Objects/setobject.c index 707ab95646..d62164773b 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -142,7 +142,10 @@ set_insert_key(PySetObject *so, PyObject *key, Py_hash_t hash) entry = &table[i]; if (entry->key == NULL) - goto found_null; + goto found_null_first; + + freeslot = NULL; + perturb = hash; while (1) { if (entry->hash == hash) { @@ -207,6 +210,13 @@ set_insert_key(PySetObject *so, PyObject *key, Py_hash_t hash) goto found_null; } + found_null_first: + so->fill++; + so->used++; + entry->key = key; + entry->hash = hash; + return 0; + found_null: if (freeslot == NULL) { /* UNUSED */