diff options
Diffstat (limited to 'Objects/object.c')
-rw-r--r-- | Objects/object.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c index b14e52a..bf0e6d1 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -846,6 +846,17 @@ PyObject_Hash(PyObject *v) PyTypeObject *tp = Py_TYPE(v); if (tp->tp_hash != NULL) return (*tp->tp_hash)(v); + /* To keep to the general practice that inheriting + * solely from object in C code should work without + * an explicit call to PyType_Ready, we implicitly call + * PyType_Ready here and then check the tp_hash slot again + */ + if (tp->tp_dict == NULL) { + if (PyType_Ready(tp) < 0) + return -1; + if (tp->tp_hash != NULL) + return (*tp->tp_hash)(v); + } /* Otherwise, the object can't be hashed */ return PyObject_HashNotImplemented(v); } |