Commit 1647020d authored by Raymond Hettinger's avatar Raymond Hettinger

Add shortcuts for a|a and a&a.

parent e1414455
...@@ -1065,6 +1065,8 @@ set_union(PySetObject *so, PyObject *other) ...@@ -1065,6 +1065,8 @@ set_union(PySetObject *so, PyObject *other)
result = (PySetObject *)set_copy(so); result = (PySetObject *)set_copy(so);
if (result == NULL) if (result == NULL)
return NULL; return NULL;
if ((PyObject *)so == other)
return (PyObject *)result;
if (set_update_internal(result, other) == -1) { if (set_update_internal(result, other) == -1) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
...@@ -1106,10 +1108,8 @@ set_intersection(PySetObject *so, PyObject *other) ...@@ -1106,10 +1108,8 @@ set_intersection(PySetObject *so, PyObject *other)
PySetObject *result; PySetObject *result;
PyObject *key, *it, *tmp; PyObject *key, *it, *tmp;
if ((PyObject *)so == other) { if ((PyObject *)so == other)
Py_INCREF(other); return set_copy(so);
return other;
}
result = (PySetObject *)make_new_set(so->ob_type, NULL); result = (PySetObject *)make_new_set(so->ob_type, NULL);
if (result == NULL) if (result == NULL)
...@@ -2062,13 +2062,14 @@ test_c_api(PySetObject *so) ...@@ -2062,13 +2062,14 @@ test_c_api(PySetObject *so)
Py_DECREF(f); Py_DECREF(f);
/* Raise KeyError when popping from an empty set */ /* Raise KeyError when popping from an empty set */
set_clear_internal(so); assert(PyNumber_InPlaceSubtract(ob, ob) == ob);
Py_DECREF(ob);
assert(PySet_GET_SIZE(ob) == 0); assert(PySet_GET_SIZE(ob) == 0);
assertRaises(PySet_Pop(ob) == NULL, PyExc_KeyError); assertRaises(PySet_Pop(ob) == NULL, PyExc_KeyError);
/* Restore the set from the copy and use the abstract API */ /* Restore the set from the copy using the PyNumber API */
assert(PyObject_CallMethod(ob, "update", "O", dup) == Py_None); assert(PyNumber_InPlaceOr(ob, dup) == ob);
Py_DECREF(Py_None); Py_DECREF(ob);
/* Verify constructors accept NULL arguments */ /* Verify constructors accept NULL arguments */
f = PySet_New(NULL); f = PySet_New(NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment