Skip to content

Commit 947ccb4

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2025: Self-host: spec tests fail
1 parent 8b409e0 commit 947ccb4

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@
179179
[]
180180
(->> (merge (get-in @env/*compiler* [::ana/namespaces ana/*cljs-ns* :requires])
181181
(get-in @env/*compiler* [::ana/namespaces ana/*cljs-ns* :require-macros]))
182-
(remove (fn [[k v]] (= k v)))
182+
(remove (fn [[k v]] (symbol-identical? k v)))
183183
(into {})))
184184

185185
;; -----------------------------------------------------------------------------
@@ -457,6 +457,19 @@
457457
(update :renames rewrite-renames)
458458
(update :rename-macros rewrite-renames))))
459459

460+
(defn- check-macro-autoload-inferring-missing
461+
[{:keys [requires name] :as ast} cenv]
462+
(let [namespaces (-> @cenv ::ana/namespaces)
463+
missing-require-macros (into {}
464+
(filter (fn [[_ full-ns]]
465+
(let [{:keys [use-macros require-macros]} (get namespaces full-ns)]
466+
(or (some #{full-ns} (vals use-macros))
467+
(some #{full-ns} (vals require-macros))))))
468+
requires)
469+
ast' (update-in ast [:require-macros] merge missing-require-macros)]
470+
(swap! cenv update-in [::ana/namespaces name :require-macros] merge missing-require-macros)
471+
ast'))
472+
460473
(defn- ns-side-effects
461474
([bound-vars ana-env ast opts cb]
462475
(ns-side-effects false bound-vars ana-env ast opts cb))
@@ -498,7 +511,8 @@
498511
env/*compiler* (:*compiler* bound-vars)]
499512
(let [ast' (-> rewritten-ast
500513
(ana/check-use-macros-inferring-missing env)
501-
(ana/check-rename-macros-inferring-missing env))]
514+
(ana/check-rename-macros-inferring-missing env)
515+
(check-macro-autoload-inferring-missing env))]
502516
(cb {:value ast'})))
503517
(catch :default cause
504518
(cb (wrap-error

src/main/cljs/cljs/spec/alpha.cljc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,19 @@
3636
(defn- res [env form]
3737
(cond
3838
(keyword? form) form
39-
(symbol? form) (clojure.core/or (->> form (resolve env) ->sym) form)
39+
(symbol? form) #?(:clj (clojure.core/or (->> form (resolve env) ->sym) form)
40+
:cljs (let [resolved (clojure.core/or (->> form (resolve env) ->sym) form)
41+
ns-name (namespace resolved)]
42+
(symbol
43+
(if (clojure.core/and ns-name (str/ends-with? ns-name "$macros"))
44+
(subs ns-name 0 (- (count ns-name) 7))
45+
ns-name)
46+
(name resolved))))
4047
(sequential? form) (walk/postwalk #(if (symbol? %) (res env %) %) (unfn form))
4148
:else form))
4249

4350
(defmacro ^:private mres
44-
"a compile time res, for use in cljs/spec.cljs"
51+
"a compile time res, for use in cljs/spec/alpha.cljs"
4552
[form]
4653
(res &env form))
4754

src/main/clojure/cljs/analyzer.cljc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -968,8 +968,12 @@
968968
(some? (namespace sym))
969969
(let [ns (namespace sym)
970970
ns (if (= "clojure.core" ns) "cljs.core" ns)
971-
full-ns (resolve-macro-ns-alias env ns)]
972-
(get-in namespaces [full-ns :macros (symbol (name sym))]))
971+
full-ns (resolve-macro-ns-alias env ns)
972+
#?@(:cljs [full-ns (if-not (string/ends-with? (str full-ns) "$macros")
973+
(symbol (str full-ns "$macros"))
974+
full-ns)])]
975+
#?(:clj (get-in namespaces [full-ns :macros (symbol (name sym))])
976+
:cljs (get-in namespaces [full-ns :defs (symbol (name sym))])))
973977

974978
(some? (get-in namespaces [ns :use-macros sym]))
975979
(let [full-ns (get-in namespaces [ns :use-macros sym])]
@@ -2865,7 +2869,7 @@
28652869
env)
28662870
ret {:env env :form sym}
28672871
lcls (:locals env)]
2868-
(if-some [lb (get lcls sym)]
2872+
(if-some [lb (get lcls sym)]
28692873
(assoc ret :op :var :info lb)
28702874
(let [sym-meta (meta sym)
28712875
sym-ns (namespace sym)

0 commit comments

Comments
 (0)