Skip to content

Commit 278d2a5

Browse files
committed
extend List & Vector to new Compilable method -find-sources
change cljs.analyzer/parse-ns so that it can take a sequential list of forms change cljs.closure/compile-sources to handle List & Vector Compilable cases fixes browser REPL
1 parent 9d1b008 commit 278d2a5

File tree

2 files changed

+44
-35
lines changed

2 files changed

+44
-35
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,38 +2694,44 @@
26942694
(or (when (contains? opts :load-macros)
26952695
(:load-macros opts))
26962696
false)]
2697-
(with-open [rdr (io/reader src)]
2698-
(loop [forms (forms-seq* rdr (source-path src))]
2699-
(if (seq forms)
2700-
(let [env (empty-env)
2701-
ast (no-warn (analyze env (first forms) nil opts))]
2702-
(if (= :ns (:op ast))
2703-
(let [ns-name (:name ast)
2704-
ns-name (if (and (= 'cljs.core ns-name)
2705-
(= "cljc" (util/ext src)))
2706-
'cljs.core$macros
2707-
ns-name)
2708-
deps (merge (:uses ast) (:requires ast))]
2709-
(.close ^Reader rdr)
2710-
[(merge
2711-
{:ns (or ns-name 'cljs.user)
2712-
:provides [ns-name]
2713-
:requires (if (= 'cljs.core ns-name)
2714-
(set (vals deps))
2715-
(cond-> (conj (set (vals deps)) 'cljs.core)
2716-
(get-in compiler-env [:options :emit-constants])
2717-
(conj 'constants-table)))
2718-
:file dest
2719-
:source-file src
2720-
:ast ast
2721-
:macros-ns (or (:macros-ns opts)
2722-
(= 'cljs.core$macros ns-name))}
2723-
(when (and dest (.exists ^File dest))
2724-
{:lines (with-open [reader (io/reader dest)]
2725-
(-> reader line-seq count))}))
2726-
@env/*compiler*])
2727-
(recur (rest forms))))
2728-
(throw (AssertionError. (str "No ns form found in " src)))))))]
2697+
(let [rdr (when-not (sequential? src) (io/reader src))]
2698+
(try
2699+
(loop [forms (if rdr
2700+
(forms-seq* rdr (source-path src))
2701+
src)]
2702+
(if (seq forms)
2703+
(let [env (empty-env)
2704+
ast (no-warn (analyze env (first forms) nil opts))]
2705+
(if (= :ns (:op ast))
2706+
(let [ns-name (:name ast)
2707+
ns-name (if (and (= 'cljs.core ns-name)
2708+
(= "cljc" (util/ext src)))
2709+
'cljs.core$macros
2710+
ns-name)
2711+
deps (merge (:uses ast) (:requires ast))]
2712+
[(merge
2713+
{:ns (or ns-name 'cljs.user)
2714+
:provides [ns-name]
2715+
:requires (if (= 'cljs.core ns-name)
2716+
(set (vals deps))
2717+
(cond-> (conj (set (vals deps)) 'cljs.core)
2718+
(get-in compiler-env [:options :emit-constants])
2719+
(conj 'constants-table)))
2720+
:file dest
2721+
:source-file (when rdr src)
2722+
:source-forms (when-not rdr src)
2723+
:ast ast
2724+
:macros-ns (or (:macros-ns opts)
2725+
(= 'cljs.core$macros ns-name))}
2726+
(when (and dest (.exists ^File dest))
2727+
{:lines (with-open [reader (io/reader dest)]
2728+
(-> reader line-seq count))}))
2729+
@env/*compiler*])
2730+
(recur (rest forms))))
2731+
(throw (AssertionError. (str "No ns form found in " src)))))
2732+
(finally
2733+
(when rdr
2734+
(.close ^Reader rdr))))))]
27292735
(when (false? (:restore opts))
27302736
(swap! env/*compiler*
27312737
(fn [old-state]

src/main/clojure/cljs/closure.clj

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,15 +507,17 @@
507507
clojure.lang.PersistentList
508508
(-compile [this opts]
509509
(compile-form-seq [this]))
510-
; FIXME: -find-sources
510+
(-find-sources [this opts]
511+
[(ana/parse-ns [this] opts)])
511512

512513
String
513514
(-compile [this opts] (-compile (io/file this) opts))
514515
(-find-sources [this opts] (-find-sources (io/file this) opts))
515516

516517
clojure.lang.PersistentVector
517518
(-compile [this opts] (compile-form-seq this))
518-
; FIXME: -find-sources
519+
(-find-sources [this opts]
520+
[(ana/parse-ns this opts)])
519521
)
520522

521523
(comment
@@ -750,7 +752,8 @@
750752
(for [ns-info inputs]
751753
; TODO: compile-file calls parse-ns unnecessarily to get ns-info
752754
; TODO: we could mark dependent namespaces for recompile here
753-
(-compile (:source-file ns-info)
755+
(-compile (or (:source-file ns-info)
756+
(:source-forms ns-info))
754757
; - ns-info -> ns -> cljs file relpath -> js relpath
755758
(merge opts {:output-file (comp/rename-to-js (util/ns->relpath (:ns ns-info)))})))))))
756759

0 commit comments

Comments
 (0)