From 4d8c29cd572b9556e6cfdcfea58724c4a69dbaa6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 16 Dec 2013 23:05:13 +0100 Subject: [PATCH] tracemalloc: only use unsigned types to compute hash Commit to simplify the backport to python 2.7 and to make the code more consistent. --- Modules/_tracemalloc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 95b05d61c5..7e6113dc1a 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -336,8 +336,7 @@ static Py_uhash_t traceback_hash(traceback_t *traceback) { /* code based on tuplehash() of Objects/tupleobject.c */ - Py_uhash_t x; /* Unsigned for defined overflow behavior. */ - Py_hash_t y; + Py_uhash_t x, y; /* Unsigned for defined overflow behavior. */ int len = traceback->nframe; Py_uhash_t mult = _PyHASH_MULTIPLIER; frame_t *frame; @@ -345,13 +344,13 @@ traceback_hash(traceback_t *traceback) x = 0x345678UL; frame = traceback->frames; while (--len >= 0) { - y = PyObject_Hash(frame->filename); - y ^= frame->lineno; + y = (Py_uhash_t)PyObject_Hash(frame->filename); + y ^= (Py_uhash_t)frame->lineno; frame++; x = (x ^ y) * mult; /* 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; return x; -- 2.40.0