Affects Version/s: None
Fix Version/s: None
ClojureScript will produce unsigned hash values at times (in particular for keywords produced with the keyword fn), and this is inconsistent with hashes produced on literal keywords and inconsistent with Clojure. The hash values will have the same 32-bit hex value, so this is perhaps not that critical for many uses.
cljs.user=> (hash :op)
cljs.user=> (hash (keyword "op"))
This unsigned value is produced on Safari (shipping and WebKit nightly), and thus is in theory produced via both variants of the imul implementation (see
CLJS-823). The unsigned value is also produced by Firefox.
In either case the value is equivalent to 0x8fc3e24d and works for many use cases, but it fails an = test.
user=> (= (hash :op) (hash (keyword "op")))
cljs.user=> (= (hash :op) (hash (keyword "op")))