diff --git a/compiler/kernel-primitives.rkt b/compiler/kernel-primitives.rkt index e9aa2bc..81cfecb 100644 --- a/compiler/kernel-primitives.rkt +++ b/compiler/kernel-primitives.rkt @@ -90,6 +90,8 @@ 'prop:exn:srclocs 'hash? + 'hash-eq? + 'hash-eqv? 'make-hash 'make-hasheqv 'make-hasheq diff --git a/js-assembler/runtime-src/baselib-hashes.js b/js-assembler/runtime-src/baselib-hashes.js index 50688f5..19e9371 100644 --- a/js-assembler/runtime-src/baselib-hashes.js +++ b/js-assembler/runtime-src/baselib-hashes.js @@ -349,11 +349,11 @@ }; var isHashEqv = function (x) { - return (x instanceof WhalesongHashtable || x instanceof WhalesongImmutableHashtable) && x.type === 'eqv'; + return (x instanceof WhalesongHashtable || x instanceof WhalesongImmutableHashtable) && x.type === 'hasheqv'; }; var isHashEq = function (x) { - return (x instanceof WhalesongHashtable || x instanceof WhalesongImmutableHashtable) && x.type === 'eq'; + return (x instanceof WhalesongHashtable || x instanceof WhalesongImmutableHashtable) && x.type === 'hasheq'; }; diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index b2b0851..ecdb819 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -2516,6 +2516,19 @@ function(M) { return baselib.hashes.isHash(checkAny(M, 'hash?', 0)); }); + installPrimitiveProcedure( + 'hash-eq?', + 1, + function(M) { + return baselib.hashes.isHashEq(checkAny(M, 'hash-eq?', 0)); + }); + installPrimitiveProcedure( + 'hash-eqv?', + 1, + function(M) { + return baselib.hashes.isHashEqv(checkAny(M, 'hash-eqv?', 0)); + }); + installPrimitiveProcedure( 'make-hasheq', diff --git a/lang/kernel.rkt b/lang/kernel.rkt index ee1eb2e..e93c6fb 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -150,6 +150,8 @@ with-continuation-mark hash? + hash-eq? + hash-eqv? make-hash make-hasheqv make-hasheq diff --git a/tests/more-tests/hashes.expected b/tests/more-tests/hashes.expected index 9437153..632e216 100644 --- a/tests/more-tests/hashes.expected +++ b/tests/more-tests/hashes.expected @@ -21,6 +21,15 @@ not-found 1 1 1 +true +true +true +false +true +false +false +false +true danny dyoo@hashcollision.org unknown diff --git a/tests/more-tests/hashes.rkt b/tests/more-tests/hashes.rkt index c735e4c..3b8d1e0 100644 --- a/tests/more-tests/hashes.rkt +++ b/tests/more-tests/hashes.rkt @@ -64,6 +64,15 @@ (hash-ref ht "test!") +(hash? (make-immutable-hash)) +(hash? (make-immutable-hasheq)) +(hash? (make-immutable-hasheqv)) +(hash-eq? (make-immutable-hash)) +(hash-eq? (make-immutable-hasheq)) +(hash-eq? (make-immutable-hasheqv)) +(hash-eqv? (make-immutable-hash)) +(hash-eqv? (make-immutable-hasheq)) +(hash-eqv? (make-immutable-hasheqv)) (let* ([ht (make-immutable-hash)] [ht (hash-set ht 'name "danny")] [ht (hash-set ht 'email "dyoo@hashcollision.org")])