Skip to content

Commit 9ac09b2

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2287: Self-host: require prints result of loading node deps / global exports
1 parent b17c186 commit 9ac09b2

File tree

2 files changed

+53
-12
lines changed

2 files changed

+53
-12
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -590,24 +590,28 @@
590590
(cb {:value ast}))))
591591

592592
(defn- node-side-effects
593-
[bound-vars sb deps ns-name]
593+
[bound-vars sb deps ns-name emit-nil-result?]
594594
(doseq [dep deps]
595595
(.append sb
596596
(with-out-str
597597
(comp/emitln (munge ns-name) "."
598598
(ana/munge-node-lib dep)
599-
" = require('" dep "');")))))
599+
" = require('" dep "');"))))
600+
(when (and (seq deps) emit-nil-result?)
601+
(.append sb "null;")))
600602

601603
(defn- global-exports-side-effects
602-
[bound-vars sb deps ns-name]
604+
[bound-vars sb deps ns-name emit-nil-result?]
603605
(let [{:keys [js-dependency-index]} @(:*compiler* bound-vars)]
604606
(doseq [dep deps]
605607
(let [{:keys [global-exports]} (get js-dependency-index (name dep))]
606608
(.append sb
607609
(with-out-str
608610
(comp/emitln (munge ns-name) "."
609611
(ana/munge-global-export dep)
610-
" = goog.global." (get global-exports (symbol dep)) ";")))))))
612+
" = goog.global." (get global-exports (symbol dep)) ";")))))
613+
(when (and (seq deps) emit-nil-result?)
614+
(.append sb "null;"))))
611615

612616
(defn- analyze-str* [bound-vars source name opts cb]
613617
(let [rdr (rt/indexing-push-back-reader source 1 name)
@@ -767,10 +771,11 @@
767771
(.append sb
768772
(with-out-str (comp/emitln (str "goog.provide(\"" (comp/munge ns-name) "\");"))))
769773
(when-not (nil? node-deps)
770-
(node-side-effects bound-vars sb node-deps ns-name))
774+
(node-side-effects bound-vars sb node-deps ns-name (:def-emits-var opts)))
771775
(global-exports-side-effects bound-vars sb
772776
(filter ana/dep-has-global-exports? (:deps ast))
773-
ns-name)
777+
ns-name
778+
(:def-emits-var opts))
774779
(cb {:value (*eval-fn* {:source (.toString sb)})})))))
775780
(let [src (with-out-str (comp/emit ast))]
776781
(cb {:value (*eval-fn* {:source src})})))))))))
@@ -885,10 +890,7 @@
885890
(cb res)
886891
(let [ns-name (:name ast)]
887892
(when-not (nil? node-deps)
888-
(node-side-effects bound-vars sb node-deps ns-name))
889-
(global-exports-side-effects bound-vars sb
890-
(filter ana/dep-has-global-exports? (:deps ast))
891-
ns-name)
893+
(node-side-effects bound-vars sb node-deps ns-name (:def-emits-var opts)))
892894
(compile-loop (:name ast))))))
893895
(recur ns)))))
894896
(do
@@ -1021,10 +1023,11 @@
10211023
(cb res)
10221024
(let [ns-name (:name ast)]
10231025
(when-not (nil? node-deps)
1024-
(node-side-effects bound-vars sb node-deps ns-name))
1026+
(node-side-effects bound-vars sb node-deps ns-name (:def-emits-var opts)))
10251027
(global-exports-side-effects bound-vars sb
10261028
(filter ana/dep-has-global-exports? (:deps ast))
1027-
ns-name)
1029+
ns-name
1030+
(:def-emits-var opts))
10281031
(compile-loop ns'))))))
10291032
(do
10301033
(.append sb (with-out-str (comp/emit ast)))

src/test/self/self_host/test.cljs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,44 @@
10911091
(is (= value 3))
10921092
(inc! l)))))))))
10931093

1094+
(deftest test-cljs-2287
1095+
(async done
1096+
(let [st (cljs/empty-state)
1097+
l (latch 1 done)]
1098+
(cljs/eval-str
1099+
(atom @st)
1100+
"(ns foo.core (:require [path]))"
1101+
nil
1102+
{:context :expr
1103+
:target :nodejs
1104+
:def-emits-var true
1105+
:eval identity}
1106+
(fn [{{:keys [source]} :value}]
1107+
(is (some? (re-find #"foo\.core\.node\$module\$path = require\('path'\);\snull;" source)))
1108+
(inc! l)))
1109+
(let [calculator-load (fn [_ cb]
1110+
(cb {:lang :js
1111+
:source "global.Calculator = {
1112+
add: function (a, b) {
1113+
return a + b;
1114+
},
1115+
subtract: function (a, b) {
1116+
return a - b;
1117+
}
1118+
};"}))]
1119+
(swap! st assoc :js-dependency-index {"calculator" {:global-exports '{calculator Calculator}}})
1120+
(cljs/eval-str
1121+
(atom @st)
1122+
"(ns foo.core (:require [calculator])) (calculator/add 1 2)"
1123+
nil
1124+
{:context :expr
1125+
:def-emits-var true
1126+
:load calculator-load
1127+
:eval identity}
1128+
(fn [{{:keys [source]} :value}]
1129+
(is (some? (re-find #"foo\.core\.global\$module\$calculator = goog.global.Calculator;\snull;" source)))
1130+
(inc! l)))))))
1131+
10941132
(defn -main [& args]
10951133
(run-tests))
10961134

0 commit comments

Comments
 (0)