diff options
| author | Raymond Hettinger <python@rcn.com> | 2006-12-08 03:17:18 (GMT) |
|---|---|---|
| committer | Raymond Hettinger <python@rcn.com> | 2006-12-08 03:17:18 (GMT) |
| commit | f31e17509a6d5e06d75e4d6e6249d3115cdb96ba (patch) | |
| tree | 23c452c6a6574a6b06c20d3f015dfd0df5d83d2e /Objects/setobject.c | |
| parent | 70f466932cd1b0fdd734df61bbf9190848e51f3a (diff) | |
| download | cpython-f31e17509a6d5e06d75e4d6e6249d3115cdb96ba.zip cpython-f31e17509a6d5e06d75e4d6e6249d3115cdb96ba.tar.gz cpython-f31e17509a6d5e06d75e4d6e6249d3115cdb96ba.tar.bz2 | |
Eliminate two redundant calls to PyObject_Hash().
Diffstat (limited to 'Objects/setobject.c')
| -rw-r--r-- | Objects/setobject.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/Objects/setobject.c b/Objects/setobject.c index 9d72b33..1b9d70d 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; } } |
