diff --git a/quickjs.c b/quickjs.c index 9024aa8..c660b2d 100644 --- a/quickjs.c +++ b/quickjs.c @@ -46963,7 +46963,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); @@ -46973,7 +46973,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; diff --git a/tests/test_builtin.js b/tests/test_builtin.js index f4fece8..22c5464 100644 --- a/tests/test_builtin.js +++ b/tests/test_builtin.js @@ -671,6 +671,20 @@ function test_map() { var a, i, n, tab, o, v; n = 1000; + + a = new Map(); + for (var i = 0; i < n; i++) { + a.set(i, i); + } + a.set(-2147483648, 1); + assert(a.get(-2147483648), 1); + assert(a.get(-2147483647 - 1), 1); + assert(a.get(-2147483647.5 - 0.5), 1); + + a.set(1n, 1n); + assert(a.get(1n), 1n); + assert(a.get(2n**1000n - (2n**1000n - 1n)), 1n); + a = new Map(); tab = []; for(i = 0; i < n; i++) {