summaryrefslogtreecommitdiffstats
path: root/Objects/unicodeobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r--Objects/unicodeobject.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 76616b5..d52c080 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6588,12 +6588,19 @@ unicode_getitem(PyUnicodeObject *self, Py_ssize_t index)
}
static long
-unicode_hash(PyObject *self)
+unicode_hash(PyUnicodeObject *self)
{
- /* Since Unicode objects compare equal to their UTF-8 string
- counterparts, we hash the UTF-8 string. */
- PyObject *v = _PyUnicode_AsDefaultEncodedString(self, NULL);
- return PyObject_Hash(v);
+ if (self->hash != -1) {
+ return self->hash;
+ }
+ else {
+ /* Since Unicode objects compare equal to their UTF-8 string
+ counterparts, we hash the UTF-8 string. */
+ PyObject *v = _PyUnicode_AsDefaultEncodedString((PyObject*)self, NULL);
+ long x = PyObject_Hash(v);
+ self->hash = x;
+ return x;
+ }
}
PyDoc_STRVAR(index__doc__,