|
171 | 171 | ([bound-vars name opts cb]
|
172 | 172 | (require bound-vars name nil opts cb))
|
173 | 173 | ([bound-vars name reload opts cb]
|
174 |
| - (when (= :reload reload) |
175 |
| - (swap! *loaded* disj name)) |
176 |
| - (when (= :reload-all reload) |
177 |
| - (reset! *loaded* #{})) |
178 |
| - (when (:verbose opts) |
179 |
| - (debug-prn (str "Loading " name (when (:macros-ns opts) " macros") " namespace"))) |
180 |
| - (when-not (contains? @*loaded* name) |
181 |
| - (let [env (:*env* bound-vars)] |
182 |
| - (try |
183 |
| - ((:*load-fn* bound-vars) |
184 |
| - {:name name |
185 |
| - :macros (:macros-ns opts) |
186 |
| - :path (ns->relpath name)} |
187 |
| - (fn [resource] |
188 |
| - (assert (or (map? resource) (nil? resource)) |
189 |
| - "*load-fn* may only return a map or nil") |
190 |
| - (if resource |
191 |
| - (let [{:keys [lang source cache source-map]} resource] |
192 |
| - (condp = lang |
193 |
| - :clj (eval-str* bound-vars source name opts |
194 |
| - (fn [res] |
195 |
| - (if (:error res) |
196 |
| - (cb res) |
197 |
| - (cb {:value true})))) |
198 |
| - :js (let [res (try |
199 |
| - ((:*eval-fn* bound-vars) resource) |
200 |
| - (when cache |
201 |
| - (load-analysis-cache! |
202 |
| - (:*compiler* bound-vars) name cache)) |
203 |
| - (when source-map |
204 |
| - (load-source-map! |
205 |
| - (:*compiler* bound-vars) name source-map)) |
206 |
| - (catch :default cause |
207 |
| - (wrap-error |
208 |
| - (ana/error env |
209 |
| - (str "Could not require " name) cause))))] |
210 |
| - (if (:error res) |
211 |
| - (cb res) |
212 |
| - (cb {:value true}))) |
213 |
| - (cb (wrap-error |
214 |
| - (ana/error env |
215 |
| - (str "Invalid :lang specified " lang ", only :clj or :js allowed")))))) |
216 |
| - (cb (wrap-error |
217 |
| - (ana/error env |
218 |
| - (ana/error-message :undeclared-ns |
219 |
| - {:ns-sym name :js-provide (cljs.core/name name)}))))))) |
220 |
| - (catch :default cause |
221 |
| - (cb (wrap-error |
222 |
| - (ana/error env |
223 |
| - (str "Could not require " name) cause))))))))) |
| 174 | + (let [name (cond-> name (:macro-ns opts) ana/macro-ns-name)] |
| 175 | + (when (= :reload reload) |
| 176 | + (swap! *loaded* disj name)) |
| 177 | + (when (= :reload-all reload) |
| 178 | + (reset! *loaded* #{})) |
| 179 | + (when (:verbose opts) |
| 180 | + (debug-prn (str "Loading " name (when (:macros-ns opts) " macros") " namespace"))) |
| 181 | + (if-not (contains? @*loaded* name) |
| 182 | + (let [env (:*env* bound-vars)] |
| 183 | + (try |
| 184 | + ((:*load-fn* bound-vars) |
| 185 | + {:name name |
| 186 | + :macros (:macros-ns opts) |
| 187 | + :path (ns->relpath name)} |
| 188 | + (fn [resource] |
| 189 | + (assert (or (map? resource) (nil? resource)) |
| 190 | + "*load-fn* may only return a map or nil") |
| 191 | + (if resource |
| 192 | + (let [{:keys [lang source cache source-map]} resource] |
| 193 | + (condp = lang |
| 194 | + :clj (eval-str* bound-vars source name opts |
| 195 | + (fn [res] |
| 196 | + (if (:error res) |
| 197 | + (cb res) |
| 198 | + (do |
| 199 | + (swap! *loaded* conj name) |
| 200 | + (cb {:value true}))))) |
| 201 | + :js (let [res (try |
| 202 | + ((:*eval-fn* bound-vars) resource) |
| 203 | + (when cache |
| 204 | + (load-analysis-cache! |
| 205 | + (:*compiler* bound-vars) name cache)) |
| 206 | + (when source-map |
| 207 | + (load-source-map! |
| 208 | + (:*compiler* bound-vars) name source-map)) |
| 209 | + (catch :default cause |
| 210 | + (wrap-error |
| 211 | + (ana/error env |
| 212 | + (str "Could not require " name) cause))))] |
| 213 | + (if (:error res) |
| 214 | + (cb res) |
| 215 | + (do |
| 216 | + (swap! *loaded* conj name) |
| 217 | + (cb {:value true})))) |
| 218 | + (cb (wrap-error |
| 219 | + (ana/error env |
| 220 | + (str "Invalid :lang specified " lang ", only :clj or :js allowed")))))) |
| 221 | + (cb (wrap-error |
| 222 | + (ana/error env |
| 223 | + (ana/error-message :undeclared-ns |
| 224 | + {:ns-sym name :js-provide (cljs.core/name name)}))))))) |
| 225 | + (catch :default cause |
| 226 | + (cb (wrap-error |
| 227 | + (ana/error env |
| 228 | + (str "Could not require " name) cause)))))) |
| 229 | + (cb {:value true}))))) |
224 | 230 |
|
225 | 231 | (declare ns-side-effects analyze-deps)
|
226 | 232 |
|
|
822 | 828 | (fn [{:keys [error] :as res}]
|
823 | 829 | (if error
|
824 | 830 | (do
|
825 |
| - (println error) |
| 831 | + (println "Error:" error) |
826 | 832 | (println (.. error -cause -stack)))
|
827 |
| - (println res)))) |
| 833 | + (println "Result:" res)))) |
828 | 834 |
|
829 | 835 | (cljs/eval-str st
|
830 | 836 | "(ns foo.bar)\n(first [1 2 3])"
|
|
854 | 860 | (println (.. error -cause -stack)))
|
855 | 861 | (println res))))
|
856 | 862 |
|
857 |
| - ;; inline source maps work under Node.js |
858 | 863 | (cljs/eval-str st
|
859 | 864 | "(ns foo.bar)\n(ffirst [1 2 3])"
|
860 | 865 | 'foo.bar
|
861 | 866 | {:verbose true
|
862 |
| - :source-map false |
| 867 | + :source-map true |
863 | 868 | :eval node-eval
|
864 | 869 | :load node-load}
|
865 | 870 | (fn [{:keys [error] :as res}]
|
|
0 commit comments