Skip to content

Commit f45a6b1

Browse files
faviladnolen
authored andcommitted
CLJS-2104: Const-replaced exprs do not emit js "return"
When const-replacement is done during emission, we must ensure we use the :context of the *replaced* form, not the const form.
1 parent 3f588c8 commit f45a6b1

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/main/clojure/cljs/compiler.cljc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@
332332
(defmethod emit* :var
333333
[{:keys [info env form] :as ast}]
334334
(if-let [const-expr (:const-expr ast)]
335-
(emit const-expr)
335+
(emit (assoc const-expr :env env))
336336
(let [var-name (:name info)
337337
info (if (= (namespace var-name) "js")
338338
(let [js-module-name (get-in @env/*compiler* [:js-module-index (name var-name)])]

src/test/cljs/cljs/core_test.cljs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,16 @@
13271327
(is (= :fail (try (subvec nil 1 nil)
13281328
(catch js/Error e :fail))))))
13291329

1330+
(def ^:const cljs-2104 "cljs-2104")
1331+
1332+
(deftest test-const-emission
1333+
(testing "const exprs emission context, not definition context (CLJS-2104)"
1334+
(is (= cljs-2104 "cljs-2104"))
1335+
(is (= (if-some [x true]
1336+
cljs-2104
1337+
"unreachable")
1338+
"cljs-2104"))))
1339+
13301340
(comment
13311341
;; ObjMap
13321342
;; (let [ks (map (partial str "foo") (range 500))

0 commit comments

Comments
 (0)