diff -r 2f86a69c3220 Objects/setobject.c --- a/Objects/setobject.c Tue Jul 07 00:34:37 2015 -0500 +++ b/Objects/setobject.c Tue Jul 07 11:37:36 2015 +0300 @@ -1249,12 +1249,8 @@ set_intersection(PySetObject *so, PyObje key = entry->key; hash = entry->hash; rv = set_contains_entry(so, key, hash); - if (rv < 0) { - Py_DECREF(result); - return NULL; - } - if (rv) { - if (set_add_entry(result, key, hash)) { + if (rv != 0) { + if (rv < 0 || set_add_entry(result, key, hash)) { Py_DECREF(result); return NULL; } @@ -1274,10 +1270,8 @@ set_intersection(PySetObject *so, PyObje if (hash == -1) goto error; rv = set_contains_entry(so, key, hash); - if (rv < 0) - goto error; - if (rv) { - if (set_add_entry(result, key, hash)) + if (rv != 0) { + if (rv < 0 || set_add_entry(result, key, hash)) goto error; } Py_DECREF(key); @@ -1399,10 +1393,11 @@ set_isdisjoint(PySetObject *so, PyObject } while (set_next((PySetObject *)other, &pos, &entry)) { rv = set_contains_entry(so, entry->key, entry->hash); - if (rv < 0) - return NULL; - if (rv) + if (rv != 0) { + if (rv < 0) + return NULL; Py_RETURN_FALSE; + } } Py_RETURN_TRUE; } @@ -1421,12 +1416,10 @@ set_isdisjoint(PySetObject *so, PyObject } rv = set_contains_entry(so, key, hash); Py_DECREF(key); - if (rv < 0) { + if (rv != 0) { Py_DECREF(it); - return NULL; - } - if (rv) { - Py_DECREF(it); + if (rv < 0) + return NULL; Py_RETURN_FALSE; } } @@ -1535,12 +1528,8 @@ set_difference(PySetObject *so, PyObject key = entry->key; hash = entry->hash; rv = _PyDict_Contains(other, key, hash); - if (rv < 0) { - Py_DECREF(result); - return NULL; - } - if (!rv) { - if (set_add_entry((PySetObject *)result, key, hash)) { + if (rv <= 0) { + if (rv < 0 || set_add_entry((PySetObject *)result, key, hash)) { Py_DECREF(result); return NULL; } @@ -1554,12 +1543,8 @@ set_difference(PySetObject *so, PyObject key = entry->key; hash = entry->hash; rv = set_contains_entry((PySetObject *)other, key, hash); - if (rv < 0) { - Py_DECREF(result); - return NULL; - } - if (!rv) { - if (set_add_entry((PySetObject *)result, key, hash)) { + if (rv <= 0) { + if (rv < 0 || set_add_entry((PySetObject *)result, key, hash)) { Py_DECREF(result); return NULL; } @@ -1633,12 +1618,8 @@ set_symmetric_difference_update(PySetObj while (_PyDict_Next(other, &pos, &key, &value, &hash)) { Py_INCREF(key); rv = set_discard_entry(so, key, hash); - if (rv < 0) { - Py_DECREF(key); - return NULL; - } - if (rv == DISCARD_NOTFOUND) { - if (set_add_entry(so, key, hash)) { + if (rv <= 0) { + if (rv < 0 || set_add_entry(so, key, hash)) { Py_DECREF(key); return NULL; } @@ -1661,12 +1642,8 @@ set_symmetric_difference_update(PySetObj key = entry->key; hash = entry->hash; rv = set_discard_entry(so, key, hash); - if (rv < 0) { - Py_DECREF(otherset); - return NULL; - } - if (rv == DISCARD_NOTFOUND) { - if (set_add_entry(so, key, hash)) { + if (rv <= 0) { + if (rv < 0 || set_add_entry(so, key, hash)) { Py_DECREF(otherset); return NULL; } @@ -1744,10 +1721,11 @@ set_issubset(PySetObject *so, PyObject * while (set_next(so, &pos, &entry)) { rv = set_contains_entry((PySetObject *)other, entry->key, entry->hash); - if (rv < 0) - return NULL; - if (!rv) + if (rv <= 0) { + if (rv < 0) + return NULL; Py_RETURN_FALSE; + } } Py_RETURN_TRUE; }