summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-05-23 00:01:41 (GMT)
committerGuido van Rossum <guido@python.org>1997-05-23 00:01:41 (GMT)
commit5b2121b25fc6a50fe229fe25ef6be8a2f883d1f4 (patch)
tree18e78a7730aa0fddf20b379d44bdd4e7798bda21 /Objects
parent7e8d26d78c8e015d9e1cc22b9df8144e62b6fa2a (diff)
downloadcpython-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')
-rw-r--r--Objects/dictobject.c8
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)