Skip to content

Commit 5a94364

Browse files
committed
Support Persistent/VECTOR in a backwards compatible way
If we have a symbol of the form A/B and the following conditions are met: 1. A is not an namespace alias 2. A is not a dotted symbol 3. A is an unqualifed var defined or referred in the current ns Then interpret A/B as A.B Note this means that namespace aliases will always shadow unqualified vars defined or referred in the current ns
1 parent 98fced6 commit 5a94364

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,6 +1313,10 @@
13131313
{:name sym}
13141314
lb))
13151315

1316+
(defn qualified->dotted
1317+
[sym]
1318+
(symbol (str (namespace sym) "." (name sym))))
1319+
13161320
(defn resolve-var
13171321
"Resolve a var. Accepts a side-effecting confirm fn for producing
13181322
warnings about unresolved vars."
@@ -1356,20 +1360,25 @@
13561360
(some? lb) (assoc lb :op :local)
13571361

13581362
(some? (namespace sym))
1359-
(let [ns (namespace sym)
1360-
ns (if #?(:clj (= "clojure.core" ns)
1361-
:cljs (identical? "clojure.core" ns))
1362-
"cljs.core"
1363-
ns)
1364-
full-ns (resolve-ns-alias env ns
1365-
(or (and (js-module-exists? ns)
1366-
(gets @env/*compiler* :js-module-index ns :name))
1367-
(symbol ns)))]
1368-
(when (some? confirm)
1369-
(when (not= current-ns full-ns)
1370-
(confirm-ns env full-ns))
1371-
(confirm env full-ns (symbol (name sym))))
1372-
(resolve* env sym full-ns current-ns))
1363+
(let [ns (namespace sym)]
1364+
(if-let [resolved (and (nil? (resolve-ns-alias env ns nil))
1365+
(not (dotted-symbol? ns))
1366+
(resolve-var env (symbol ns) nil false)
1367+
(resolve-var env (qualified->dotted sym) nil false))]
1368+
resolved
1369+
(let [ns (if #?(:clj (= "clojure.core" ns)
1370+
:cljs (identical? "clojure.core" ns))
1371+
"cljs.core"
1372+
ns)
1373+
full-ns (resolve-ns-alias env ns
1374+
(or (and (js-module-exists? ns)
1375+
(gets @env/*compiler* :js-module-index ns :name))
1376+
(symbol ns)))]
1377+
(when (some? confirm)
1378+
(when (not= current-ns full-ns)
1379+
(confirm-ns env full-ns))
1380+
(confirm env full-ns (symbol (name sym))))
1381+
(resolve* env sym full-ns current-ns))))
13731382

13741383
(dotted-symbol? sym)
13751384
(let [idx (.indexOf s ".")

0 commit comments

Comments
 (0)