mirror of
https://github.com/python/cpython.git
synced 2025-08-23 02:04:56 +00:00
GH-95150: Use position and exception tables for code hashing and equality (GH-95509)
(cherry picked from commit c7e5bbaee8
)
Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
This commit is contained in:
parent
76d83b1dfe
commit
7baca3c05e
5 changed files with 68 additions and 5 deletions
|
@ -1693,6 +1693,15 @@ code_richcompare(PyObject *self, PyObject *other, int op)
|
|||
eq = PyObject_RichCompareBool(co->co_localsplusnames,
|
||||
cp->co_localsplusnames, Py_EQ);
|
||||
if (eq <= 0) goto unequal;
|
||||
eq = PyObject_RichCompareBool(co->co_linetable, cp->co_linetable, Py_EQ);
|
||||
if (eq <= 0) {
|
||||
goto unequal;
|
||||
}
|
||||
eq = PyObject_RichCompareBool(co->co_exceptiontable,
|
||||
cp->co_exceptiontable, Py_EQ);
|
||||
if (eq <= 0) {
|
||||
goto unequal;
|
||||
}
|
||||
|
||||
if (op == Py_EQ)
|
||||
res = Py_True;
|
||||
|
@ -1725,7 +1734,15 @@ code_hash(PyCodeObject *co)
|
|||
if (h2 == -1) return -1;
|
||||
h3 = PyObject_Hash(co->co_localsplusnames);
|
||||
if (h3 == -1) return -1;
|
||||
h = h0 ^ h1 ^ h2 ^ h3 ^
|
||||
Py_hash_t h4 = PyObject_Hash(co->co_linetable);
|
||||
if (h4 == -1) {
|
||||
return -1;
|
||||
}
|
||||
Py_hash_t h5 = PyObject_Hash(co->co_exceptiontable);
|
||||
if (h5 == -1) {
|
||||
return -1;
|
||||
}
|
||||
h = h0 ^ h1 ^ h2 ^ h3 ^ h4 ^ h5 ^
|
||||
co->co_argcount ^ co->co_posonlyargcount ^ co->co_kwonlyargcount ^
|
||||
co->co_flags;
|
||||
if (h == -1) h = -2;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue