Skip to content

Commit 3c0df9c

Browse files
anmonteirodnolen
authored andcommitted
CLJS-2361: Self-host: circular dependency detection doesn't handle REPL self-require
1 parent 33ce3d5 commit 3c0df9c

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,14 +366,20 @@
366366
(patch-renames :renames)
367367
(patch-renames :rename-macros)))
368368

369+
(defn- self-require? [deps opts]
370+
(and (true? (:def-emits-var opts)) (some #{ana/*cljs-ns*} deps)))
371+
369372
(defn- load-deps
370373
([bound-vars ana-env lib deps cb]
371374
(load-deps bound-vars ana-env lib deps nil nil cb))
372375
([bound-vars ana-env lib deps reload opts cb]
373376
(when (:verbose opts)
374377
(debug-prn "Loading dependencies for" lib))
375-
(binding [ana/*cljs-dep-set* (vary-meta (conj (:*cljs-dep-set* bound-vars) lib)
376-
update-in [:dep-path] conj lib)]
378+
(binding [ana/*cljs-dep-set* (let [lib (if (self-require? deps opts)
379+
'cljs.user
380+
lib)]
381+
(vary-meta (conj (:*cljs-dep-set* bound-vars) lib)
382+
update-in [:dep-path] conj lib))]
377383
(let [bound-vars (assoc bound-vars :*cljs-dep-set* ana/*cljs-dep-set*)]
378384
(if-not (every? #(not (contains? ana/*cljs-dep-set* %)) deps)
379385
(cb (wrap-error

src/test/self/self_host/test.cljs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,27 @@
12981298
(.-message error)))
12991299
(inc! l)))))))
13001300

1301+
(deftest test-self-host-self-require
1302+
(async done
1303+
(let [st (cljs/empty-state)
1304+
l (latch 1 done)
1305+
load (fn [{:keys [name macros]} cb]
1306+
(cb {:lang :clj
1307+
:source "(ns foo.core)"}))]
1308+
(binding [ana/*cljs-dep-set* (with-meta #{} {:dep-path []})]
1309+
(cljs.js/eval-str st "(ns foo.core)" nil
1310+
{:eval node-eval}
1311+
(fn [{:keys [error value] :as m}]
1312+
(is (nil? error))
1313+
(cljs.js/eval-str st "(require 'foo.core :reload)" nil
1314+
{:load load
1315+
:eval node-eval
1316+
:def-emits-var true
1317+
:ns 'foo.core}
1318+
(fn [{:keys [error value] :as m}]
1319+
(is (nil? error))
1320+
(inc! l)))))))))
1321+
13011322
(defn -main [& args]
13021323
(run-tests))
13031324

0 commit comments

Comments
 (0)