Skip to content

Commit 5ac08cc

Browse files
author
dnolen
committed
CLJS-1779: keyword 2-arity constructor accepts anything for both parameters which leads to different hashing
1 parent d0be396 commit 5ac08cc

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

src/main/cljs/cljs/core.cljs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3207,7 +3207,16 @@ reduces them without incurring seq initialization"
32073207
(if (== (alength parts) 2)
32083208
(Keyword. (aget parts 0) (aget parts 1) name nil)
32093209
(Keyword. nil (aget parts 0) name nil)))))
3210-
([ns name] (Keyword. ns name (str (when ns (str ns "/")) name) nil)))
3210+
([ns name]
3211+
(let [ns (cond
3212+
(keyword? ns) (cljs.core/name ns)
3213+
(symbol? ns) (cljs.core/name ns)
3214+
:else ns)
3215+
name (cond
3216+
(keyword? name) (cljs.core/name name)
3217+
(symbol? name) (cljs.core/name name)
3218+
:else name)]
3219+
(Keyword. ns name (str (when ns (str ns "/")) name) nil))))
32113220

32123221

32133222
(deftype LazySeq [meta ^:mutable fn ^:mutable s ^:mutable __hash]

src/test/cljs/cljs/core_test.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3241,6 +3241,10 @@
32413241
(is (= foo-1274 42))
32423242
(is (= cljs.core-test/foo-1274 42)))
32433243

3244+
(deftest test-cljs-1779
3245+
(is (= (hash (keyword 'app "foo"))
3246+
(hash (keyword "app" "foo")))))
3247+
32443248
(comment
32453249
;; ObjMap
32463250
;; (let [ks (map (partial str "foo") (range 500))

0 commit comments

Comments
 (0)