Skip to content

Commit f2897be

Browse files
author
dnolen
committed
CLJS-841: cljs.closure/build file locks
stop using cljs.analyzer/forms-seq, instead use new cljs.analyzer/forms-seq which takes a java.io.Reader. Switch all prior usage of forms-seq to forms-seq* and wrap in with-out
1 parent fc75264 commit f2897be

File tree

4 files changed

+84
-79
lines changed

4 files changed

+84
-79
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2043,29 +2043,30 @@
20432043
(or (when (contains? opts :load-macros)
20442044
(:load-macros opts))
20452045
false)]
2046-
(loop [[forms rdr] (forms-seq src (source-path src) true)]
2047-
(if (seq forms)
2048-
(let [env (empty-env)
2049-
ast (no-warn (analyze env (first forms) nil opts))]
2050-
(if (= (:op ast) :ns)
2051-
(let [ns-name (:name ast)
2052-
deps (merge (:uses ast) (:requires ast))]
2053-
(.close ^Reader rdr)
2054-
(merge
2055-
{:ns (or ns-name 'cljs.user)
2056-
:provides [ns-name]
2057-
:requires (if (= ns-name 'cljs.core)
2058-
(set (vals deps))
2059-
(cond-> (conj (set (vals deps)) 'cljs.core)
2060-
(get-in @env/*compiler* [:opts :emit-constants])
2061-
(conj 'constants-table)))
2062-
:file dest
2063-
:source-file src
2064-
:ast ast}
2065-
(when (and dest (.exists ^File dest))
2066-
{:lines (with-open [reader (io/reader dest)]
2067-
(-> reader line-seq count))})))
2068-
(recur (rest forms)))))))]
2046+
(with-open [rdr (io/reader src)]
2047+
(loop [forms (forms-seq* rdr (source-path src))]
2048+
(if (seq forms)
2049+
(let [env (empty-env)
2050+
ast (no-warn (analyze env (first forms) nil opts))]
2051+
(if (= (:op ast) :ns)
2052+
(let [ns-name (:name ast)
2053+
deps (merge (:uses ast) (:requires ast))]
2054+
(.close ^Reader rdr)
2055+
(merge
2056+
{:ns (or ns-name 'cljs.user)
2057+
:provides [ns-name]
2058+
:requires (if (= ns-name 'cljs.core)
2059+
(set (vals deps))
2060+
(cond-> (conj (set (vals deps)) 'cljs.core)
2061+
(get-in @env/*compiler* [:opts :emit-constants])
2062+
(conj 'constants-table)))
2063+
:file dest
2064+
:source-file src
2065+
:ast ast}
2066+
(when (and dest (.exists ^File dest))
2067+
{:lines (with-open [reader (io/reader dest)]
2068+
(-> reader line-seq count))})))
2069+
(recur (rest forms))))))))]
20692070
;; TODO this _was_ a reset! of the old namespaces atom; should we capture and
20702071
;; then restore the entirety of env/*compiler* here instead?
20712072
(when-not (false? (:restore opts))
@@ -2161,15 +2162,16 @@
21612162
(when (or *verbose* (:verbose opts))
21622163
(util/debug-prn "Analyzing" (str res)))
21632164
(let [env (assoc (empty-env) :build-options opts)
2164-
ns (loop [ns nil forms (seq (forms-seq res))]
2165-
(if forms
2166-
(let [form (first forms)
2167-
env (assoc env :ns (get-namespace *cljs-ns*))
2168-
ast (analyze env form nil opts)]
2169-
(if (= (:op ast) :ns)
2170-
(recur (:name ast) (next forms))
2171-
(recur ns (next forms))))
2172-
ns))]
2165+
ns (with-open [rdr (io/reader res)]
2166+
(loop [ns nil forms (seq (forms-seq* rdr))]
2167+
(if forms
2168+
(let [form (first forms)
2169+
env (assoc env :ns (get-namespace *cljs-ns*))
2170+
ast (analyze env form nil opts)]
2171+
(if (= (:op ast) :ns)
2172+
(recur (:name ast) (next forms))
2173+
(recur ns (next forms))))
2174+
ns)))]
21732175
(when (and cache (true? (:cache-analysis opts)))
21742176
(write-analysis-cache ns cache))))
21752177
;; we want want to keep dependency analysis information

src/clj/cljs/closure.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@
357357
(let [out-file (io/file (util/output-directory opts) output-file)]
358358
(compiled-file (comp/compile-file file out-file opts)))
359359
(binding [ana/*cljs-file* (.getPath ^File file)]
360-
(compile-form-seq (ana/forms-seq file)))))
360+
(with-open [rdr (io/reader file)]
361+
(compile-form-seq (ana/forms-seq* rdr))))))
361362

362363
(defn compile-dir
363364
"Recursively compile all cljs files under the given source

src/clj/cljs/compiler.clj

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,49 +1001,50 @@
10011001
:gen-col 0
10021002
:gen-line 0}))]
10031003
(emitln (compiled-by-string opts))
1004-
(loop [forms (ana/forms-seq src)
1005-
ns-name nil
1006-
deps nil]
1007-
(if (seq forms)
1008-
(let [env (ana/empty-env)
1009-
ast (ana/analyze env (first forms) nil opts)]
1010-
(emit ast)
1011-
(if (= (:op ast) :ns)
1012-
(recur (rest forms) (:name ast) (merge (:uses ast) (:requires ast)))
1013-
(recur (rest forms) ns-name deps)))
1014-
(let [sm-data (when *source-map-data* @*source-map-data*)
1015-
ret (merge
1016-
{:ns (or ns-name 'cljs.user)
1017-
:provides [ns-name]
1018-
:requires (if (= ns-name 'cljs.core)
1019-
(set (vals deps))
1020-
(cond-> (conj (set (vals deps)) 'cljs.core)
1021-
(get-in @env/*compiler* [:opts :emit-constants])
1022-
(conj 'constants-table)))
1023-
:file dest
1024-
:source-file src}
1025-
(when sm-data
1026-
{:source-map (:source-map sm-data)}))]
1027-
(when (and sm-data (= (:optimizations opts) :none))
1028-
(let [sm-file (io/file (str (.getPath ^File dest) ".map"))]
1029-
(emits "\n//# sourceMappingURL="
1030-
(or (:source-map-url opts) (.getName sm-file))
1031-
(if (true? (:source-map-timestamp opts))
1032-
(str "?rel=" (System/currentTimeMillis))
1033-
""))
1034-
(spit sm-file
1035-
(sm/encode {(url-path src) (:source-map sm-data)}
1036-
{:lines (+ (:gen-line sm-data) 2)
1037-
:file (url-path dest)
1038-
:source-map-timestamp (:source-map-timestamp opts)
1039-
:source-map-pretty-print (:source-map-pretty-print opts)}))))
1040-
(let [path (.getPath (.toURL ^File dest))]
1041-
(swap! env/*compiler* assoc-in [::compiled-cljs path] ret))
1042-
(let [{:keys [output-dir cache-analysis]} opts]
1043-
(when (and (true? cache-analysis) output-dir)
1044-
(ana/write-analysis-cache ns-name
1045-
(ana/cache-file src (ana/parse-ns src) output-dir :write)))
1046-
ret))))))))))))
1004+
(with-open [rdr (io/reader src)]
1005+
(loop [forms (ana/forms-seq* rdr)
1006+
ns-name nil
1007+
deps nil]
1008+
(if (seq forms)
1009+
(let [env (ana/empty-env)
1010+
ast (ana/analyze env (first forms) nil opts)]
1011+
(emit ast)
1012+
(if (= (:op ast) :ns)
1013+
(recur (rest forms) (:name ast) (merge (:uses ast) (:requires ast)))
1014+
(recur (rest forms) ns-name deps)))
1015+
(let [sm-data (when *source-map-data* @*source-map-data*)
1016+
ret (merge
1017+
{:ns (or ns-name 'cljs.user)
1018+
:provides [ns-name]
1019+
:requires (if (= ns-name 'cljs.core)
1020+
(set (vals deps))
1021+
(cond-> (conj (set (vals deps)) 'cljs.core)
1022+
(get-in @env/*compiler* [:opts :emit-constants])
1023+
(conj 'constants-table)))
1024+
:file dest
1025+
:source-file src}
1026+
(when sm-data
1027+
{:source-map (:source-map sm-data)}))]
1028+
(when (and sm-data (= (:optimizations opts) :none))
1029+
(let [sm-file (io/file (str (.getPath ^File dest) ".map"))]
1030+
(emits "\n//# sourceMappingURL="
1031+
(or (:source-map-url opts) (.getName sm-file))
1032+
(if (true? (:source-map-timestamp opts))
1033+
(str "?rel=" (System/currentTimeMillis))
1034+
""))
1035+
(spit sm-file
1036+
(sm/encode {(url-path src) (:source-map sm-data)}
1037+
{:lines (+ (:gen-line sm-data) 2)
1038+
:file (url-path dest)
1039+
:source-map-timestamp (:source-map-timestamp opts)
1040+
:source-map-pretty-print (:source-map-pretty-print opts)}))))
1041+
(let [path (.getPath (.toURL ^File dest))]
1042+
(swap! env/*compiler* assoc-in [::compiled-cljs path] ret))
1043+
(let [{:keys [output-dir cache-analysis]} opts]
1044+
(when (and (true? cache-analysis) output-dir)
1045+
(ana/write-analysis-cache ns-name
1046+
(ana/cache-file src (ana/parse-ns src) output-dir :write)))
1047+
ret)))))))))))))
10471048

10481049
(defn requires-compilation?
10491050
"Return true if the src file requires compilation."

src/clj/cljs/repl.clj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,10 @@
464464

465465
(defn load-stream [repl-env filename res]
466466
(let [env (ana/empty-env)]
467-
(doseq [form (ana/forms-seq res filename)]
468-
(let [env (assoc env :ns (ana/get-namespace ana/*cljs-ns*))]
469-
(evaluate-form repl-env env filename form)))))
467+
(with-open [rdr (io/reader res)]
468+
(doseq [form (ana/forms-seq* rdr filename)]
469+
(let [env (assoc env :ns (ana/get-namespace ana/*cljs-ns*))]
470+
(evaluate-form repl-env env filename form))))))
470471

471472
;; TODO: this should probably compile dependencies - David
472473

0 commit comments

Comments
 (0)