summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-10-07 20:32:10 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-10-07 20:32:10 (GMT)
commitd78b9dcbc3356d15bd0d0dd9f821452b4f5ba282 (patch)
tree870da709d8f5f95efcd2c120563cb88b5606e3fd /Objects
parent39defbe6a9191d3054dca0903b4861f7adcfd68d (diff)
downloadcpython-d78b9dcbc3356d15bd0d0dd9f821452b4f5ba282.zip
cpython-d78b9dcbc3356d15bd0d0dd9f821452b4f5ba282.tar.gz
cpython-d78b9dcbc3356d15bd0d0dd9f821452b4f5ba282.tar.bz2
#4069: aSet.remove(otherSet) would always report the empty frozenset([]) as the missing key.
Now it correctly refers to the initial otherset. Reviewed by Raymond. Will backport to 2.6.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/setobject.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 075f8e7..ea3970e 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -1874,7 +1874,7 @@ PyDoc_STRVAR(contains_doc, "x.__contains__(y) <==> y in x.");
static PyObject *
set_remove(PySetObject *so, PyObject *key)
{
- PyObject *tmpkey, *result;
+ PyObject *tmpkey;
int rv;
rv = set_discard_key(so, key);
@@ -1886,11 +1886,14 @@ set_remove(PySetObject *so, PyObject *key)
if (tmpkey == NULL)
return NULL;
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
- result = set_remove(so, tmpkey);
+ rv = set_discard_key(so, tmpkey);
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
Py_DECREF(tmpkey);
- return result;
- } else if (rv == DISCARD_NOTFOUND) {
+ if (rv == -1)
+ return NULL;
+ }
+
+ if (rv == DISCARD_NOTFOUND) {
set_key_error(key);
return NULL;
}