about summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorCharlie Gordon <github@chqrlie.org>2024-02-22 19:31:57 +0100
committerbptato <nincsnevem662@gmail.com>2024-03-02 18:12:24 +0100
commit3bce5ee06cf475bf60c8fd65cae556fb708f88ea (patch)
tree2bf238b1920feca58467e9bd5444520824a4e142 /lib
parent994ecade79fced9e21e2794f86b0a34858bd027c (diff)
downloadchawan-3bce5ee06cf475bf60c8fd65cae556fb708f88ea.tar.gz
Fix Map hash bug
- `map_hash_key` must generate the same key for JS_INT and JS_FLOAT64
   with the same value
- add test cases in tests/test_builtin.js
Diffstat (limited to 'lib')
-rw-r--r--lib/quickjs/quickjs.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/quickjs/quickjs.c b/lib/quickjs/quickjs.c
index 4afbf78b..927f97d2 100644
--- a/lib/quickjs/quickjs.c
+++ b/lib/quickjs/quickjs.c
@@ -47071,7 +47071,7 @@ static uint32_t map_hash_key(JSContext *ctx, JSValueConst key)
         h = (uintptr_t)JS_VALUE_GET_PTR(key) * 3163;
         break;
     case JS_TAG_INT:
-        d = JS_VALUE_GET_INT(key) * 3163;
+        d = JS_VALUE_GET_INT(key);
         goto hash_float64;
     case JS_TAG_FLOAT64:
         d = JS_VALUE_GET_FLOAT64(key);
@@ -47081,7 +47081,7 @@ static uint32_t map_hash_key(JSContext *ctx, JSValueConst key)
     hash_float64:
         u.d = d;
         h = (u.u32[0] ^ u.u32[1]) * 3163;
-        break;
+        return h ^= JS_TAG_FLOAT64;
     default:
         h = 0; /* XXX: bignum support */
         break;