Skip to content

Commit 168b8a4

Browse files
mfikesswannodette
authored andcommitted
CLJS-3305: defrecord must implement IAssociative -contains-key?
1 parent 6abd05d commit 168b8a4

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/main/clojure/cljs/core.cljc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,6 +1866,12 @@
18661866
this#
18671867
entry#)))
18681868
'IAssociative
1869+
`(~'-contains-key? [this# ~ksym]
1870+
~(if (seq base-fields)
1871+
`(case ~ksym
1872+
(~@(map keyword base-fields)) true
1873+
(cljs.core/contains? ~'__extmap ~ksym))
1874+
`(cljs.core/contains? ~'__extmap ~ksym)))
18691875
`(~'-assoc [this# k# ~gs]
18701876
(condp keyword-identical? k#
18711877
~@(mapcat (core/fn [fld]

src/test/cljs/cljs/core_test.cljs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,3 +1826,21 @@
18261826

18271827
(deftest test-cljs-3271
18281828
(is (== 0.6 (nth (range 0 1 0.1) 6))))
1829+
1830+
(defrecord CLJS3305A [])
1831+
(defrecord CLJS3305B [a b])
1832+
1833+
(deftest test-cljs-3305
1834+
(let [empty-basis (->CLJS3305A)
1835+
nonempty-basis (->CLJS3305B 1 2)
1836+
empty-extended (assoc empty-basis :y 1)
1837+
nonempty-extended (assoc nonempty-basis :y 1)]
1838+
(is (false? (contains? empty-basis :a)))
1839+
(is (true? (contains? nonempty-basis :a)))
1840+
(is (false? (contains? nonempty-basis :c)))
1841+
(is (true? (contains? empty-extended :y)))
1842+
(is (false? (contains? empty-extended :z)))
1843+
(is (true? (contains? nonempty-extended :a)))
1844+
(is (false? (contains? nonempty-extended :c)))
1845+
(is (true? (contains? nonempty-extended :y)))
1846+
(is (false? (contains? nonempty-extended :z)))))

0 commit comments

Comments
 (0)