Skip to content

Commit 0d0f509

Browse files
committed
CLJS-1158: Regression: compiler fails to see symbols defined in another namespace
Namespaces and macro namespaces can share the same name. In the case that some other namespace loads a macro namespace this will prevent analysis of the runtime namespace because `cljs.analyzer/analyze-deps` only examines the existence of a ns entry, not the presence of actual var mappings - `:defs`. We now check for `:defs`. Also when writing out the analysis cache we always drop `:macros` as we do not track macro namespaces on disk for changes. We should always reload macros and populate `:macros` fresh.
1 parent 576fb6e commit 0d0f509

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,20 +1229,21 @@
12291229
(defn analyze-deps
12301230
([lib deps env] (analyze-deps lib deps env nil))
12311231
([lib deps env opts]
1232+
(let [compiler @env/*compiler*]
12321233
(binding [*cljs-dep-set* (vary-meta (conj *cljs-dep-set* lib) update-in [:dep-path] conj lib)]
12331234
(assert (every? #(not (contains? *cljs-dep-set* %)) deps)
12341235
(str "Circular dependency detected " (-> *cljs-dep-set* meta :dep-path)))
12351236
(doseq [dep deps]
1236-
(when-not (or (contains? (::namespaces @env/*compiler*) dep)
1237-
(contains? (:js-dependency-index @env/*compiler*) (name dep))
1237+
(when-not (or (not-empty (get-in compiler [::namespaces dep :defs]))
1238+
(contains? (:js-dependency-index compiler) (name dep))
12381239
(deps/find-classpath-lib dep))
12391240
(let [relpath (util/ns->relpath dep)
12401241
src (locate-src relpath)]
12411242
(if src
12421243
(analyze-file src opts)
12431244
(throw
12441245
(error env
1245-
(error-message :undeclared-ns {:ns-sym dep :path relpath}))))))))))
1246+
(error-message :undeclared-ns {:ns-sym dep :path relpath})))))))))))
12461247

12471248
(defn check-uses [uses env]
12481249
(doseq [[sym lib] uses]
@@ -2115,7 +2116,8 @@
21152116
(util/mkdirs cache-file)
21162117
(spit cache-file
21172118
(str ";; Analyzed by ClojureScript " (util/clojurescript-version) "\n"
2118-
(pr-str (get-in @env/*compiler* [::namespaces ns])))))
2119+
(pr-str
2120+
(dissoc (get-in @env/*compiler* [::namespaces ns]) :macros)))))
21192121

21202122
(defn analyze-file
21212123
"Given a java.io.File, java.net.URL or a string identifying a resource on the

0 commit comments

Comments
 (0)