Skip to content

Commit 46f7f2d

Browse files
chancerussellswannodette
authored andcommitted
CLJS-3056: runtime namespace load order is independent from ordering in ns macro :require form
Ensures that the :requires construction in cljs.compiler/emit-source maintains the ordering that namespaces were required in the code being compiled. Currently, emit-source throws the analyzed dependencies into a Clojure set, which does not preserve ordering. The patch uses the same approach as a similar fix for CLJS-1453.
1 parent aec9f0c commit 46f7f2d

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/main/clojure/cljs/compiler.cljc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,7 +1557,7 @@
15571557
emit)]
15581558
(loop [forms (ana/forms-seq* rdr (util/path src))
15591559
ns-name nil
1560-
deps nil]
1560+
deps []]
15611561
(if (seq forms)
15621562
(let [env (assoc env :ns (ana/get-namespace ana/*cljs-ns*))
15631563
{:keys [op] :as ast} (ana/analyze env (first forms) nil opts)]
@@ -1569,7 +1569,7 @@
15691569
'cljs.core$macros
15701570
ns-name)]
15711571
(emit ast)
1572-
(recur (rest forms) ns-name (merge (:uses ast) (:requires ast))))
1572+
(recur (rest forms) ns-name (into deps (:deps ast))))
15731573

15741574
(= :ns* (:op ast))
15751575
(let [ns-emitted? (some? ns-name)
@@ -1579,7 +1579,7 @@
15791579
(if-not ns-emitted?
15801580
(emit (assoc ast :name ns-name :op :ns))
15811581
(emit ast))
1582-
(recur (rest forms) ns-name (merge deps (:uses ast) (:requires ast))))
1582+
(recur (rest forms) ns-name (into deps (:deps ast))))
15831583

15841584
:else
15851585
(let [ns-emitted? (some? ns-name)
@@ -1600,11 +1600,11 @@
16001600
{:ns (or ns-name 'cljs.user)
16011601
:macros-ns (:macros-ns opts)
16021602
:provides [ns-name]
1603-
:requires (if (= ns-name 'cljs.core)
1604-
(set (vals deps))
1605-
(cond-> (conj (set (vals deps)) 'cljs.core)
1606-
(get-in @env/*compiler* [:options :emit-constants])
1607-
(conj ana/constants-ns-sym)))
1603+
:requires (cond-> (distinct deps)
1604+
(get-in @env/*compiler* [:options :emit-constants])
1605+
(conj ana/constants-ns-sym)
1606+
(not= ns-name 'cljs.core)
1607+
(conj 'cljs.core))
16081608
:file dest
16091609
:out-file (.toString ^File dest)
16101610
:source-file src}

0 commit comments

Comments
 (0)