Skip to content

Commit e35dd45

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2032: Case macro expansion evaluates expression twice when no matching clause
1 parent 2d59793 commit e35dd45

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/main/clojure/cljs/core.cljc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2192,11 +2192,12 @@
21922192
expression, a vector can be used to match a list if needed. The
21932193
test-constants need not be all of the same type."
21942194
[e & clauses]
2195-
(core/let [default (if (odd? (count clauses))
2195+
(core/let [esym (gensym)
2196+
default (if (odd? (count clauses))
21962197
(last clauses)
21972198
`(throw
21982199
(js/Error.
2199-
(cljs.core/str "No matching clause: " ~e))))
2200+
(cljs.core/str "No matching clause: " ~esym))))
22002201
env &env
22012202
pairs (reduce
22022203
(core/fn [m [test expr]]
@@ -2214,7 +2215,6 @@
22142215
:else
22152216
(assoc-test m test expr env)))
22162217
{} (partition 2 clauses))
2217-
esym (gensym)
22182218
tests (keys pairs)]
22192219
(core/cond
22202220
(every? (some-fn core/number? core/string? #?(:clj core/char? :cljs (core/fnil core/char? :nonchar)) #(const? env %)) tests)

0 commit comments

Comments
 (0)