Skip to content

Commit d8ae109

Browse files
kamnswannodette
authored andcommitted
CLJS-1297 defrecord does not emit IKVReduce protocol
Changed the setup for defrecord and provided a simple implementation of kvreduce. The implementation is copied from Clojure. Also added one test.
1 parent 1db8679 commit d8ae109

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

src/main/clojure/cljs/core.cljc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,6 +1867,9 @@
18671867
writer# pr-pair# ~pr-open ", " "}" opts#
18681868
(concat [~@(map #(core/list `vector (keyword %) %) base-fields)]
18691869
~'__extmap))))
1870+
'IKVReduce
1871+
`(~'-kv-reduce [this# f# init#]
1872+
(reduce (fn [ret# [k# v#]] (f# ret# k# v#)) init# this#))
18701873
])
18711874
[fpps pmasks] (prepare-protocol-masks env impls)
18721875
protocols (collect-protocols impls env)

src/test/cljs/cljs/new_new_test.cljs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@
8080
(map->Person {:firstname "Fred" :lastname "Mertz" :wife :ethel})))
8181
(is (= (dissoc ethel :husband)
8282
(map->Person {:firstname "Ethel" :lastname "Mertz"})))
83+
(is (= (reduce-kv assoc {:age 30} fred)
84+
{:age 30 :firstname "Fred" :lastname "Mertz"}))
8385
(is (= {:foo 'bar} (meta (with-meta (A.) {:foo 'bar}))))
8486
(is (= 'bar (:foo (assoc (A.) :foo 'bar))))
8587
(is (= (set (keys letters)) #{:a :b :c}))

0 commit comments

Comments
 (0)