From: Raymond Hettinger Date: Fri, 8 Dec 2006 03:17:18 +0000 (+0000) Subject: Eliminate two redundant calls to PyObject_Hash(). X-Git-Tag: v2.6a1~2386 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f31e17509a6d5e06d75e4d6e6249d3115cdb96ba;p=python Eliminate two redundant calls to PyObject_Hash(). --- diff --git a/Objects/setobject.c b/Objects/setobject.c index 9d72b33c0d..1b9d70de9b 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1164,7 +1164,19 @@ set_intersection(PySetObject *so, PyObject *other) } while ((key = PyIter_Next(it)) != NULL) { - int rv = set_contains_key(so, key); + int rv; + setentry entry; + long hash = PyObject_Hash(key); + + if (hash == -1) { + Py_DECREF(it); + Py_DECREF(result); + Py_DECREF(key); + return NULL; + } + entry.hash = hash; + entry.key = key; + rv = set_contains_entry(so, &entry); if (rv == -1) { Py_DECREF(it); Py_DECREF(result); @@ -1172,7 +1184,7 @@ set_intersection(PySetObject *so, PyObject *other) return NULL; } if (rv) { - if (set_add_key(result, key) == -1) { + if (set_add_entry(result, &entry) == -1) { Py_DECREF(it); Py_DECREF(result); Py_DECREF(key); @@ -1383,11 +1395,18 @@ set_symmetric_difference_update(PySetObject *so, PyObject *other) PyObject *value; int rv; while (PyDict_Next(other, &pos, &key, &value)) { - rv = set_discard_key(so, key); + setentry an_entry; + long hash = PyObject_Hash(key); + + if (hash == -1) + return NULL; + an_entry.hash = hash; + an_entry.key = key; + rv = set_discard_entry(so, &an_entry); if (rv == -1) return NULL; if (rv == DISCARD_NOTFOUND) { - if (set_add_key(so, key) == -1) + if (set_add_entry(so, &an_entry) == -1) return NULL; } }