summaryrefslogtreecommitdiffstats
path: root/Objects/setobject.c
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2007-02-19 02:03:19 (GMT)
committerRaymond Hettinger <python@rcn.com>2007-02-19 02:03:19 (GMT)
commitd6fc72a5ae27048dae56c773896ccbd6152d9b9b (patch)
treefceb231e6ba8e5b85b6f5baab0a908d056b9390d /Objects/setobject.c
parentf7ccc101d2d623428dd03114bd8723946d5dbcae (diff)
downloadcpython-d6fc72a5ae27048dae56c773896ccbd6152d9b9b.zip
cpython-d6fc72a5ae27048dae56c773896ccbd6152d9b9b.tar.gz
cpython-d6fc72a5ae27048dae56c773896ccbd6152d9b9b.tar.bz2
Extend work on revision 52962: Eliminate redundant calls to PyObject_Hash().
Diffstat (limited to 'Objects/setobject.c')
-rw-r--r--Objects/setobject.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/Objects/setobject.c b/Objects/setobject.c
index fc9d823..1f06cee 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -918,8 +918,14 @@ set_update_internal(PySetObject *so, PyObject *other)
if (PyDict_CheckExact(other)) {
PyObject *value;
Py_ssize_t pos = 0;
- while (PyDict_Next(other, &pos, &key, &value)) {
- if (set_add_key(so, key) == -1)
+ long hash;
+
+ while (_PyDict_Next(other, &pos, &key, &value, &hash)) {
+ setentry an_entry;
+
+ an_entry.hash = hash;
+ an_entry.key = key;
+ if (set_add_entry(so, &an_entry) == -1)
return -1;
}
return 0;
@@ -1382,7 +1388,7 @@ set_difference(PySetObject *so, PyObject *other)
setentry entrycopy;
entrycopy.hash = entry->hash;
entrycopy.key = entry->key;
- if (!PyDict_Contains(other, entry->key)) {
+ if (!_PyDict_Contains(other, entry->key, entry->hash)) {
if (set_add_entry((PySetObject *)result, &entrycopy) == -1) {
Py_DECREF(result);
return NULL;
@@ -1453,12 +1459,10 @@ set_symmetric_difference_update(PySetObject *so, PyObject *other)
if (PyDict_CheckExact(other)) {
PyObject *value;
int rv;
- while (PyDict_Next(other, &pos, &key, &value)) {
+ long hash;
+ while (_PyDict_Next(other, &pos, &key, &value, &hash)) {
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);