Commit 19c2d778 authored by Raymond Hettinger's avatar Raymond Hettinger

Allow temporary hashability for the __contains__ test.

(Requested by Alex Martelli.)
parent 3fbec701
......@@ -35,6 +35,8 @@ class TestJointOps(unittest.TestCase):
for c in self.letters:
self.assertEqual(c in self.s, c in self.d)
self.assertRaises(TypeError, self.s.__contains__, [[]])
s = self.thetype([frozenset(self.letters)])
self.assert_(self.thetype(self.letters) in s)
def test_copy(self):
dup = self.s.copy()
......
......@@ -104,7 +104,23 @@ set_len(PySetObject *so)
static int
set_contains(PySetObject *so, PyObject *key)
{
return PySequence_Contains(so->data, key);
PyObject *olddict;
PySetObject *tmp;
int result;
result = PySequence_Contains(so->data, key);
if (result == -1 && PyType_IsSubtype(key->ob_type, &PySet_Type)) {
PyErr_Clear();
tmp = (PySetObject *)make_new_set(&PyFrozenSet_Type, NULL);
if (tmp == NULL)
return -1;
olddict = tmp->data;
tmp->data = ((PySetObject *)(key))->data;
result = PySequence_Contains(so->data, (PyObject *)tmp);
tmp->data = olddict;
Py_DECREF(tmp);
}
return result;
}
static PyObject *
......
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