|
4120 | 4120 | (select-keys lb [:name :local :arg-id :variadic? :init]))) |
4121 | 4121 | (let [sym-meta (meta sym) |
4122 | 4122 | sym-ns (namespace sym) |
| 4123 | + sym-name (name sym) |
4123 | 4124 | cur-ns (str (-> env :ns :name)) |
4124 | 4125 | ;; when compiling a macros namespace that requires itself, we need |
4125 | 4126 | ;; to resolve calls to `my-ns.core/foo` to `my-ns.core$macros/foo` |
|
4130 | 4131 | (not (gstring/endsWith sym-ns "$macros")) |
4131 | 4132 | (= sym-ns (subs cur-ns 0 (- (count cur-ns) 7)))) |
4132 | 4133 | (symbol (str sym-ns "$macros") (name sym)) |
4133 | | - sym)]) |
4134 | | - info (if-not (contains? sym-meta ::analyzed) |
| 4134 | + sym)])] |
| 4135 | + (if (and sym-ns |
| 4136 | + (nil? (resolve-ns-alias env sym-ns nil)) |
| 4137 | + (or (= "new" sym-name) |
| 4138 | + (string/starts-with? sym-name "."))) |
| 4139 | + (merge |
| 4140 | + {:op :qualified-method |
| 4141 | + :env env |
| 4142 | + :form sym |
| 4143 | + :class (symbol sym-ns)} |
| 4144 | + (if (= "new" sym-name) |
| 4145 | + {:kind :new |
| 4146 | + :name (symbol sym-name)} |
| 4147 | + {:kind :method |
| 4148 | + :name (symbol (subs sym-name 1))})) |
| 4149 | + (let [info (if-not (contains? sym-meta ::analyzed) |
4135 | 4150 | (resolve-existing-var env sym) |
4136 | 4151 | (resolve-var env sym))] |
4137 | | - (assert (:op info) (:op info)) |
4138 | | - (desugar-dotted-expr |
4139 | | - (if-not (true? (:def-var env)) |
4140 | | - (merge |
4141 | | - (assoc ret :info info) |
4142 | | - (select-keys info [:op :name :ns :tag]) |
4143 | | - (when-let [const-expr (:const-expr info)] |
4144 | | - {:const-expr const-expr})) |
4145 | | - (let [info (resolve-var env sym)] |
4146 | | - (merge (assoc ret :op :var :info info) |
4147 | | - (select-keys info [:op :name :ns :tag])))))))))) |
| 4152 | + (assert (:op info) (:op info)) |
| 4153 | + (desugar-dotted-expr |
| 4154 | + (if-not (true? (:def-var env)) |
| 4155 | + (merge |
| 4156 | + (assoc ret :info info) |
| 4157 | + (select-keys info [:op :name :ns :tag]) |
| 4158 | + (when-let [const-expr (:const-expr info)] |
| 4159 | + {:const-expr const-expr})) |
| 4160 | + (let [info (resolve-var env sym)] |
| 4161 | + (merge (assoc ret :op :var :info info) |
| 4162 | + (select-keys info [:op :name :ns :tag])))))))))))) |
4148 | 4163 |
|
4149 | 4164 | (defn excluded? |
4150 | 4165 | #?(:cljs {:tag boolean}) |
|
0 commit comments