Skip to content

Commit 226b512

Browse files
committed
simplify cljs.analyzer/parse-ns compilation environment
restoration. Just use `binding` to do it. Throw if `parse-ns` called on something that does not supply an ns form.
1 parent 2390b79 commit 226b512

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,9 +2029,10 @@
20292029
(let [src (if (symbol? src)
20302030
(io/resource (util/ns->relpath src))
20312031
src)
2032-
namespaces' (::namespaces @env/*compiler*)
2033-
ret
2034-
(binding [*cljs-ns* 'cljs.user
2032+
compiler-env @env/*compiler*
2033+
[ijs compiler-env']
2034+
(binding [env/*compiler* (atom compiler-env)
2035+
*cljs-ns* 'cljs.user
20352036
*macro-infer*
20362037
(or (when (contains? opts :macro-infer)
20372038
(:macro-infer opts))
@@ -2053,26 +2054,27 @@
20532054
(let [ns-name (:name ast)
20542055
deps (merge (:uses ast) (:requires ast))]
20552056
(.close ^Reader rdr)
2056-
(merge
2057-
{:ns (or ns-name 'cljs.user)
2058-
:provides [ns-name]
2059-
:requires (if (= ns-name 'cljs.core)
2060-
(set (vals deps))
2061-
(cond-> (conj (set (vals deps)) 'cljs.core)
2062-
(get-in @env/*compiler* [:opts :emit-constants])
2063-
(conj 'constants-table)))
2064-
:file dest
2065-
:source-file src
2066-
:ast ast}
2067-
(when (and dest (.exists ^File dest))
2068-
{:lines (with-open [reader (io/reader dest)]
2069-
(-> reader line-seq count))})))
2070-
(recur (rest forms))))))))]
2071-
;; TODO this _was_ a reset! of the old namespaces atom; should we capture and
2072-
;; then restore the entirety of env/*compiler* here instead?
2073-
(when-not (false? (:restore opts))
2074-
(swap! env/*compiler* assoc ::namespaces namespaces'))
2075-
ret))))
2057+
[(merge
2058+
{:ns (or ns-name 'cljs.user)
2059+
:provides [ns-name]
2060+
:requires (if (= ns-name 'cljs.core)
2061+
(set (vals deps))
2062+
(cond-> (conj (set (vals deps)) 'cljs.core)
2063+
(get-in compiler-env [:opts :emit-constants])
2064+
(conj 'constants-table)))
2065+
:file dest
2066+
:source-file src
2067+
:ast ast}
2068+
(when (and dest (.exists ^File dest))
2069+
{:lines (with-open [reader (io/reader dest)]
2070+
(-> reader line-seq count))}))
2071+
@env/*compiler*])
2072+
(recur (rest forms))))
2073+
(throw (AssertionError. (str "No ns form found in " src)))))))]
2074+
(when (false? (:restore opts))
2075+
(swap! env/*compiler* update-in [::namespaces] merge
2076+
(get compiler-env' ::namespaces)))
2077+
ijs))))
20762078

20772079
(defn cache-file
20782080
"Given a ClojureScript source file returns the read/write path to the analysis

0 commit comments

Comments
 (0)