mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
bpo-1617161: Make the hash and equality of methods not depending on the value of self. (GH-7848)
* The hash of BuiltinMethodType instances no longer depends on the hash of __self__. It depends now on the hash of id(__self__). * The hash and equality of ModuleType and MethodWrapperType instances no longer depend on the hash and equality of __self__. They depend now on the hash and equality of id(__self__). * MethodWrapperType instances no longer support ordering.
This commit is contained in:
parent
c48e26dcad
commit
ac20e0f98d
6 changed files with 112 additions and 73 deletions
|
@ -251,16 +251,8 @@ static Py_hash_t
|
|||
meth_hash(PyCFunctionObject *a)
|
||||
{
|
||||
Py_hash_t x, y;
|
||||
if (a->m_self == NULL)
|
||||
x = 0;
|
||||
else {
|
||||
x = PyObject_Hash(a->m_self);
|
||||
if (x == -1)
|
||||
return -1;
|
||||
}
|
||||
x = _Py_HashPointer(a->m_self);
|
||||
y = _Py_HashPointer((void*)(a->m_ml->ml_meth));
|
||||
if (y == -1)
|
||||
return -1;
|
||||
x ^= y;
|
||||
if (x == -1)
|
||||
x = -2;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue