]> granicus.if.org Git - python/commitdiff
tracemalloc: only use unsigned types to compute hash
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 16 Dec 2013 22:05:13 +0000 (23:05 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 16 Dec 2013 22:05:13 +0000 (23:05 +0100)
Commit to simplify the backport to python 2.7 and to make the code more
consistent.

Modules/_tracemalloc.c

index 95b05d61c55d27c55224ecb16ea5d7f70c00e82d..7e6113dc1ae20596b5afd513256c3991c887894e 100644 (file)
@@ -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;