diff options
author | Guido van Rossum <guido@python.org> | 1997-05-23 00:01:41 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-05-23 00:01:41 (GMT) |
commit | 5b2121b25fc6a50fe229fe25ef6be8a2f883d1f4 (patch) | |
tree | 18e78a7730aa0fddf20b379d44bdd4e7798bda21 /Objects/dictobject.c | |
parent | 7e8d26d78c8e015d9e1cc22b9df8144e62b6fa2a (diff) | |
download | cpython-5b2121b25fc6a50fe229fe25ef6be8a2f883d1f4.zip cpython-5b2121b25fc6a50fe229fe25ef6be8a2f883d1f4.tar.gz cpython-5b2121b25fc6a50fe229fe25ef6be8a2f883d1f4.tar.bz2 |
PyObject_Compare can now return an error. Unfortunately, there are a
few places where we don't know how to test for them without losing
speed; don't know yet how to handle that.
Diffstat (limited to 'Objects/dictobject.c')
-rw-r--r-- | Objects/dictobject.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 91af728..6f92f67 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -184,6 +184,7 @@ lookdict(mp, key, hash) { return ep; } + /* XXX What if PyObject_Compare returned an exception? */ /* Derive incr from sum, just to make it more arbitrary. Note that incr must not be 0, or we will get into an infinite loop.*/ incr = (sum ^ (sum >> 3)) & mask; @@ -209,6 +210,7 @@ lookdict(mp, key, hash) PyObject_Compare(ep->me_key, key) == 0)) { return ep; } + /* XXX What if PyObject_Compare returned an exception? */ /* Cycle through GF(2^n)-{0} */ incr = incr << 1; if (incr > mask) @@ -738,10 +740,12 @@ characterize(a, b, pval) if (a->ma_table[i].me_value != NULL) { PyObject *key = a->ma_table[i].me_key; PyObject *aval, *bval; + /* XXX What if PyObject_Compare raises an exception? */ if (diff != NULL && PyObject_Compare(key, diff) > 0) continue; aval = a->ma_table[i].me_value; bval = PyDict_GetItem((PyObject *)b, key); + /* XXX What if PyObject_Compare raises an exception? */ if (bval == NULL || PyObject_Compare(aval, bval) != 0) { diff = key; @@ -766,9 +770,13 @@ dict_compare(a, b) return 1; /* b is shorter */ /* Same length -- check all keys */ adiff = characterize(a, b, &aval); + if (PyErr_Occurred()) + return -1; if (adiff == NULL) return 0; /* a is a subset with the same length */ bdiff = characterize(b, a, &bval); + if (PyErr_Occurred()) + return -1; /* bdiff == NULL would be impossible now */ res = PyObject_Compare(adiff, bdiff); if (res == 0) |