Skip to content

Commit b92c9aa

Browse files
committed
macro resolution wip
1 parent db2c4d0 commit b92c9aa

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,10 @@
384384
(let [sym (symbol name)]
385385
(get (:requires (:ns env)) sym sym)))
386386

387+
(defn resolve-macro-ns-alias [env name]
388+
(let [sym (symbol name)]
389+
(get (:require-macros (:ns env)) sym sym)))
390+
387391
(defn confirm-ns [env ns-sym]
388392
(when (and (nil? (get '#{cljs.core goog Math goog.string} ns-sym))
389393
(nil? (get (-> env :ns :requires) ns-sym))
@@ -479,6 +483,27 @@
479483
(when (and ev (not (-> ev :dynamic)))
480484
(warning :dynamic env {:ev ev :name (:name ev)})))))
481485

486+
(defn resolve-macro-var [env sym]
487+
(let [ns (-> env :ns :name)
488+
namespaces (get @env/*compiler* ::namespaces)]
489+
(cond
490+
(namespace sym)
491+
(let [ns (namespace sym)
492+
ns (if (= "clojure.core" ns) "cljs.core" ns)
493+
full-ns (resolve-macro-ns-alias env ns)]
494+
(get-in namespaces [full-ns :macros (symbol (name sym))]))
495+
496+
(get-in namespaces [ns :use-macros sym])
497+
(let [full-ns (get-in namespaces [ns :uses-macros sym])]
498+
(get-in namespaces [full-ns :macros sym]))
499+
500+
:else
501+
(let [ns (cond
502+
(get-in namespaces [ns :macros sym]) ns
503+
(core-name? env sym) 'cljs.core)]
504+
(when ns
505+
(get-in namespaces [ns :macros sym]))))))
506+
482507
(defn ns-dependents
483508
([ns]
484509
(util/topo-sort ns

0 commit comments

Comments
 (0)