Skip to content

Commit 9b7847f

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2266: Self-host: Cannot require clojure.x where clojure.x has no macros namespace
1 parent 0f10898 commit 9b7847f

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,6 @@
340340
(str "Could not require " name) cause))))))
341341
(cb {:value true})))))
342342

343-
(declare ns-side-effects analyze-deps)
344-
345343
(defn- patch-alias-map
346344
[compiler in from to]
347345
(let [patch (fn [k add-if-present?]
@@ -482,23 +480,25 @@
482480
(cb {:value nil})))
483481

484482
(defn- rewrite-ns-ast
485-
[ast smap]
486-
(let [rewrite-renames (fn [m]
487-
(when m
488-
(reduce (fn [acc [renamed qualified-sym :as entry]]
489-
(let [from (symbol (namespace qualified-sym))
490-
to (get smap from)]
491-
(if (some? to)
492-
(assoc acc renamed (symbol (str to) (name qualified-sym)))
493-
(merge acc entry))))
494-
{} m)))]
495-
(-> ast
496-
(update :uses #(walk/postwalk-replace smap %))
497-
(update :use-macros #(walk/postwalk-replace smap %))
498-
(update :requires #(merge smap (walk/postwalk-replace smap %)))
499-
(update :require-macros #(merge smap (walk/postwalk-replace smap %)))
500-
(update :renames rewrite-renames)
501-
(update :rename-macros rewrite-renames))))
483+
([ast smap]
484+
(rewrite-ns-ast ast smap false))
485+
([ast smap macros?]
486+
(let [[uk rk renk] (if macros?
487+
[:use-macros :require-macros :rename-macros]
488+
[:uses :requires :renames])
489+
rewrite-renames (fn [m]
490+
(when m
491+
(reduce (fn [acc [renamed qualified-sym :as entry]]
492+
(let [from (symbol (namespace qualified-sym))
493+
to (get smap from)]
494+
(if (some? to)
495+
(assoc acc renamed (symbol (str to) (name qualified-sym)))
496+
(merge acc entry))))
497+
{} m)))]
498+
(-> ast
499+
(update uk #(walk/postwalk-replace smap %))
500+
(update rk #(merge smap (walk/postwalk-replace smap %)))
501+
(update renk rewrite-renames)))))
502502

503503
(defn- check-macro-autoload-inferring-missing
504504
[{:keys [requires name] :as ast} cenv]
@@ -522,7 +522,7 @@
522522
(if (#{:ns :ns*} op)
523523
(letfn [(check-uses-and-load-macros [res rewritten-ast]
524524
(let [env (:*compiler* bound-vars)
525-
{:keys [uses require-macros use-macros reload reloads name]} rewritten-ast]
525+
{:keys [uses use-macros reload reloads name]} rewritten-ast]
526526
(if (:error res)
527527
(cb res)
528528
(if (:*load-macros* bound-vars)
@@ -532,13 +532,13 @@
532532
(fn [res]
533533
(if (:error res)
534534
(cb res)
535-
(let [{:keys [require-macros] :as rewritten-ast} (rewrite-ns-ast rewritten-ast (:aliased-loads res))]
535+
(let [{:keys [require-macros] :as rewritten-ast} (rewrite-ns-ast rewritten-ast (:aliased-loads res) true)]
536536
(when (:verbose opts) (debug-prn "Processing :require-macros for" (:name ast)))
537537
(load-macros bound-vars :require-macros require-macros name reload reloads opts
538538
(fn [res']
539539
(if (:error res')
540540
(cb res')
541-
(let [{:keys [require-macros use-macros] :as rewritten-ast} (rewrite-ns-ast rewritten-ast (:aliased-loads res))
541+
(let [{:keys [use-macros] :as rewritten-ast} (rewrite-ns-ast rewritten-ast (:aliased-loads res) true)
542542
res' (try
543543
(when (seq use-macros)
544544
(when (:verbose opts) (debug-prn "Checking :use-macros for" (:name ast)))

src/test/self/self_host/test.cljs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,21 @@
11761176
(is (= "#foo.core2261b.X{}" value))
11771177
(inc! l))))))))
11781178

1179+
(deftest test-cljs-2266
1180+
(async done
1181+
(let [st (cljs/empty-state)
1182+
l (latch 1 done)]
1183+
(cljs.js/eval-str st "(require 'clojure.x)" nil
1184+
{:eval node-eval
1185+
:load (fn [{:keys [name macros]} cb]
1186+
(cb (when (and (= name 'cljs.x)
1187+
(not macros))
1188+
{:lang :clj
1189+
:source "(ns cljs.x)"})))}
1190+
(fn [{:keys [error]}]
1191+
(is (nil? error))
1192+
(inc! l))))))
1193+
11791194
(defn -main [& args]
11801195
(run-tests))
11811196

0 commit comments

Comments
 (0)