Skip to content

Commit db2c4d0

Browse files
committed
intern macros logic
1 parent 89e7170 commit db2c4d0

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
[clojure.edn :as edn])
2121
(:import [java.io File Reader PushbackReader]
2222
[java.net URL]
23-
[clojure.lang Namespace]
23+
[clojure.lang Namespace Var]
2424
[cljs.tagged_literals JSValue]))
2525

2626
(set! *warn-on-reflection* true)
@@ -265,8 +265,18 @@
265265
(defn intern-macros
266266
([ns] (intern-macros ns false))
267267
([ns reload]
268-
(when (true? reload)
269-
(swap! env/*compiler* update-in [::namespaces ns] dissoc :macros))))
268+
(when (or (nil? (get-in @env/*compiler* [::namespaces ns :macros]))
269+
reload)
270+
(swap! env/*compiler* assoc-in [::namespaces ns :macros]
271+
(->> (ns-interns ns)
272+
(filter (fn [[_ ^Var v]] (.isMacro v)))
273+
(map (fn [[k v]]
274+
[k (as-> (meta v) vm
275+
(let [ns (.getName ^Namespace (:ns vm))]
276+
(assoc vm
277+
:ns ns
278+
:name (symbol (str ns) (str k)))))]))
279+
(into {}))))))
270280

271281
(defn load-core []
272282
(when (not @-cljs-macros-loaded)

0 commit comments

Comments
 (0)