diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py index d216c301be0..d8eb88205c7 100644 --- a/Lib/test/test_slice.py +++ b/Lib/test/test_slice.py @@ -14,6 +14,11 @@ def test_constructor(self): 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) diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index 796df2bb0cb..c37af2b027c 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -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 */