Commit 4d8c29cd authored by Victor Stinner's avatar Victor Stinner

tracemalloc: only use unsigned types to compute hash

Commit to simplify the backport to python 2.7 and to make the code more
consistent.
parent fffb96ba
...@@ -336,8 +336,7 @@ static Py_uhash_t ...@@ -336,8 +336,7 @@ static Py_uhash_t
traceback_hash(traceback_t *traceback) traceback_hash(traceback_t *traceback)
{ {
/* code based on tuplehash() of Objects/tupleobject.c */ /* code based on tuplehash() of Objects/tupleobject.c */
Py_uhash_t x; /* Unsigned for defined overflow behavior. */ Py_uhash_t x, y; /* Unsigned for defined overflow behavior. */
Py_hash_t y;
int len = traceback->nframe; int len = traceback->nframe;
Py_uhash_t mult = _PyHASH_MULTIPLIER; Py_uhash_t mult = _PyHASH_MULTIPLIER;
frame_t *frame; frame_t *frame;
...@@ -345,13 +344,13 @@ traceback_hash(traceback_t *traceback) ...@@ -345,13 +344,13 @@ traceback_hash(traceback_t *traceback)
x = 0x345678UL; x = 0x345678UL;
frame = traceback->frames; frame = traceback->frames;
while (--len >= 0) { while (--len >= 0) {
y = PyObject_Hash(frame->filename); y = (Py_uhash_t)PyObject_Hash(frame->filename);
y ^= frame->lineno; y ^= (Py_uhash_t)frame->lineno;
frame++; frame++;
x = (x ^ y) * mult; x = (x ^ y) * mult;
/* the cast might truncate len; that doesn't change hash stability */ /* the cast might truncate len; that doesn't change hash stability */
mult += (Py_hash_t)(82520UL + len + len); mult += (Py_uhash_t)(82520UL + len + len);
} }
x += 97531UL; x += 97531UL;
return x; return x;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment