]> granicus.if.org Git - python/commitdiff
SF bug #800796: Difference between hash() and __hash__()
authorRaymond Hettinger <python@rcn.com>
Fri, 5 Sep 2003 14:27:30 +0000 (14:27 +0000)
committerRaymond Hettinger <python@rcn.com>
Fri, 5 Sep 2003 14:27:30 +0000 (14:27 +0000)
slice(5).__hash__() now raises a TypeError.

Lib/test/test_slice.py
Objects/sliceobject.c

index d216c301be02e7ba99f0b873f5efe16ac32dfdde..d8eb88205c7102f984e018ec320fc18963e78d49 100644 (file)
@@ -14,6 +14,11 @@ class SliceTest(unittest.TestCase):
     def test_repr(self):
         self.assertEqual(repr(slice(1, 2, 3)), "slice(1, 2, 3)")
 
+    def test_hash(self):
+        # Verify clearing of SF bug #800796
+        self.assertRaises(TypeError, hash, slice(5))
+        self.assertRaises(TypeError, slice(5).__hash__)
+
     def test_cmp(self):
         s1 = slice(1, 2, 3)
         s2 = slice(1, 2, 3)
index 796df2bb0cb77a8f17a2db3218ca4d84493418bf..c37af2b027cbd764dc963df623fb57c0b6baf2e2 100644 (file)
@@ -278,6 +278,13 @@ slice_compare(PySliceObject *v, PySliceObject *w)
        return result;
 }
 
+static long
+slice_hash(PySliceObject *v)
+{
+       PyErr_SetString(PyExc_TypeError, "unhashable type");
+       return -1L;
+}
+
 PyTypeObject PySlice_Type = {
        PyObject_HEAD_INIT(&PyType_Type)
        0,                      /* Number of items for varobject */
@@ -293,7 +300,7 @@ PyTypeObject PySlice_Type = {
        0,                                      /* tp_as_number */
        0,                                      /* tp_as_sequence */
        0,                                      /* tp_as_mapping */
-       0,                                      /* tp_hash */
+       (hashfunc)slice_hash,                   /* tp_hash */
        0,                                      /* tp_call */
        0,                                      /* tp_str */
        PyObject_GenericGetAttr,                /* tp_getattro */