Skip to content

Commit

Permalink
CLJS-1737: Self-host: clojure alias implicit macro use regression
Browse files Browse the repository at this point in the history
When checking for clojure.* -> cljs.* cases in `get-expander-ns`, we
want NS resolution to return nil if it can't resolve either the macros
NS or the NS alias. `resolve-macro-ns-alias` and `resolve-ns-alias` need
to be tweaked to return nil in this case.
  • Loading branch information
anmonteiro authored and swannodette committed Aug 13, 2016
1 parent 4218670 commit 8a49ce6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/main/clojure/cljs/analyzer.cljc
Expand Up @@ -690,13 +690,19 @@
(fn [env prefix suffix]
(throw (error env (str "Unable to resolve var: " suffix " in this context")))))))

(defn resolve-ns-alias [env name]
(let [sym (symbol name)]
(get (:requires (:ns env)) sym sym)))

(defn resolve-macro-ns-alias [env name]
(let [sym (symbol name)]
(get (:require-macros (:ns env)) sym sym)))
(defn resolve-ns-alias
([env name]
(resolve-ns-alias env name (symbol name)))
([env name default]
(let [sym (symbol name)]
(get (:requires (:ns env)) sym default))))

(defn resolve-macro-ns-alias
([env name]
(resolve-macro-ns-alias env name (symbol name)))
([env name default]
(let [sym (symbol name)]
(get (:require-macros (:ns env)) sym default))))

(defn confirm-ns
"Given env, an analysis environment, and ns-sym, a symbol identifying a
Expand Down Expand Up @@ -2574,8 +2580,8 @@

(defn get-expander-ns [env ^String nstr]
;; first check for clojure.* -> cljs.* cases
(let [res (or (resolve-macro-ns-alias env (symbol nstr))
(resolve-ns-alias env (symbol nstr)))
(let [res (or (resolve-macro-ns-alias env nstr nil)
(resolve-ns-alias env nstr nil))
nstr (if res (str res) nstr)]
(cond
#?@(:clj [(= "clojure.core" nstr) (find-ns 'cljs.core)]
Expand Down
4 changes: 4 additions & 0 deletions src/test/cljs/cljs/clojure_alias_test.cljs
Expand Up @@ -9,3 +9,7 @@
(deftest aliases-test
(is? (= spec? clojure.spec/spec? cljs.spec/spec?))
(is? (foo number?)))

(deftest use-macros
(s/def ::even? (s/and number? even?))
(is? (s/valid? ::even? 2)))

0 comments on commit 8a49ce6

Please sign in to comment.