diff options
author | Raymond Hettinger <python@rcn.com> | 2009-07-27 20:29:18 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2009-07-27 20:29:18 (GMT) |
commit | 63853bbdc4d116386d617542a7d2da2233352bca (patch) | |
tree | c4ea197fa1b91fa7671b0d9f1493ce2eba1a24e5 | |
parent | 7bc66b10099552dae79fab232ea643296e10876e (diff) | |
download | cpython-63853bbdc4d116386d617542a7d2da2233352bca.zip cpython-63853bbdc4d116386d617542a7d2da2233352bca.tar.gz cpython-63853bbdc4d116386d617542a7d2da2233352bca.tar.bz2 |
Issue 6573: Fix set.union() for cases where self is in the argument chain.
-rw-r--r-- | Lib/test/test_set.py | 4 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/setobject.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 15d3c6f..222726c 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -82,6 +82,10 @@ class TestJointOps(unittest.TestCase): self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg')) + # Issue #6573 + x = self.thetype() + self.assertEqual(x.union(set([1]), x, set([2])), self.thetype([1, 2])) + def test_or(self): i = self.s.union(self.otherword) self.assertEqual(self.s | set(self.otherword), i) @@ -14,6 +14,9 @@ Core and Builtins - Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. +- Issue #6573: set.union() stopped processing inputs if an instance of self + occurred in the argument chain. + - Issue #6070: On posix platforms import no longer copies the execute bit from the .py file to the .pyc file if it is set. diff --git a/Objects/setobject.c b/Objects/setobject.c index 8ecc405..b296f9f 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1187,7 +1187,7 @@ set_union(PySetObject *so, PyObject *args) for (i=0 ; i<PyTuple_GET_SIZE(args) ; i++) { other = PyTuple_GET_ITEM(args, i); if ((PyObject *)so == other) - return (PyObject *)result; + continue; if (set_update_internal(result, other) == -1) { Py_DECREF(result); return NULL; |