Skip to content

Commit 8b16b44

Browse files
CLJS-3288: selfhost: *eval-fn* not bound for :js sources (#163)
When *load-fn* returns asynchronously, the dynamic var *eval-fn* is no longer bound. For :clj sources it is then re-bound inside eval-str*, but nothing equivalent happens for :js sources, which leads to the error No eval-fn set. This patch reads :*eval-fn* from bound-vars. Co-authored-by: Matthew Huebert <mhuebert@gmail.com>
1 parent f3e0bb5 commit 8b16b44

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -838,12 +838,12 @@
838838
ns-name
839839
(:def-emits-var opts))
840840
(cb (try
841-
{:ns ns-name :value (*eval-fn* {:source (.toString sb)})}
841+
{:ns ns-name :value ((:*eval-fn* bound-vars) {:source (.toString sb)})}
842842
(catch :default cause
843843
(wrap-error (ana/error aenv "ERROR" cause)))))))))
844844
(let [src (with-out-str (comp/emit ast))]
845845
(cb (try
846-
{:value (*eval-fn* {:source src})}
846+
{:value ((:*eval-fn* bound-vars) {:source src})}
847847
(catch :default cause
848848
(wrap-error (ana/error aenv "ERROR" cause)))))))))))))
849849

src/test/self/self_host/test.cljs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,31 @@
15921592
(is (some? error))
15931593
(inc! l))))))
15941594

1595+
(deftest test-cljs-3288
1596+
(async done
1597+
(let [st (cljs/empty-state)
1598+
l (latch 2 done)
1599+
load (fn [_ cb] (js/setTimeout #(cb {:lang :js :source ""}) 0))]
1600+
(cljs/eval st
1601+
'(require 'bootstrap-test.js-source)
1602+
{:ns 'cljs.user
1603+
:target :nodejs
1604+
:eval node-eval
1605+
:load load}
1606+
(fn [{:as res :keys [error]}]
1607+
(is (nil? error))
1608+
(inc! l)))
1609+
(cljs/eval-str st
1610+
"(require 'bootstrap-test.js-source)"
1611+
nil
1612+
{:ns 'cljs.user
1613+
:target :nodejs
1614+
:eval node-eval
1615+
:load load}
1616+
(fn [{:as res :keys [error]}]
1617+
(is (nil? error))
1618+
(inc! l))))))
1619+
15951620
(defn -main [& args]
15961621
(run-tests))
15971622

0 commit comments

Comments
 (0)