|
1156 | 1156 | (defn resolve-var |
1157 | 1157 | "Resolve a var. Accepts a side-effecting confirm fn for producing |
1158 | 1158 | warnings about unresolved vars." |
1159 | | - ([env sym] (resolve-var env sym nil)) |
| 1159 | + ([env sym] |
| 1160 | + (resolve-var env sym nil)) |
1160 | 1161 | ([env sym confirm] |
| 1162 | + (resolve-var env sym confirm true)) |
| 1163 | + ([env sym confirm default?] |
1161 | 1164 | (let [locals (:locals env)] |
1162 | 1165 | (if #?(:clj (= "js" (namespace sym)) |
1163 | 1166 | :cljs (identical? "js" (namespace sym))) |
|
1209 | 1212 | (let [idx (.indexOf s ".") |
1210 | 1213 | prefix (symbol (subs s 0 idx)) |
1211 | 1214 | suffix (subs s (inc idx))] |
1212 | | - (if-some [lb (handle-symbol-local prefix (get locals prefix))] |
1213 | | - {:op :local |
1214 | | - :name (symbol (str (:name lb) "." suffix))} |
1215 | | - (if-some [full-ns (gets @env/*compiler* ::namespaces current-ns :imports prefix)] |
1216 | | - {:op :js-var |
1217 | | - :name (symbol (str full-ns) suffix)} |
1218 | | - (if-some [info (gets @env/*compiler* ::namespaces current-ns :defs prefix)] |
1219 | | - (merge info |
1220 | | - {:name (symbol (str current-ns) (str sym)) |
1221 | | - :op :var |
1222 | | - :ns current-ns}) |
1223 | | - (merge (gets @env/*compiler* ::namespaces prefix :defs (symbol suffix)) |
1224 | | - {:name (if (= "" prefix) (symbol suffix) (symbol (str prefix) suffix)) |
1225 | | - :op :var |
1226 | | - :ns prefix}))))) |
| 1215 | + ;; check if prefix is some existing def |
| 1216 | + (if-let [resolved (resolve-var env prefix nil false)] |
| 1217 | + (update resolved :name #(symbol (str % "." suffix))) |
| 1218 | + (let [idx (.lastIndexOf s ".") |
| 1219 | + pre (subs s 0 idx) |
| 1220 | + suf (subs s (inc idx))] |
| 1221 | + {:op :var |
| 1222 | + :name (symbol pre suf) |
| 1223 | + :ns (symbol pre)}))) |
1227 | 1224 |
|
1228 | 1225 | (some? (gets @env/*compiler* ::namespaces current-ns :uses sym)) |
1229 | 1226 | (let [full-ns (gets @env/*compiler* ::namespaces current-ns :uses sym)] |
|
1236 | 1233 | (resolve* env sym full-ns current-ns)) |
1237 | 1234 |
|
1238 | 1235 | (some? (gets @env/*compiler* ::namespaces current-ns :imports sym)) |
1239 | | - (recur env (gets @env/*compiler* ::namespaces current-ns :imports sym) confirm) |
| 1236 | + (recur env (gets @env/*compiler* ::namespaces current-ns :imports sym) confirm default?) |
1240 | 1237 |
|
1241 | 1238 | (some? (gets @env/*compiler* ::namespaces current-ns :defs sym)) |
1242 | 1239 | (do |
|
1260 | 1257 | (resolve-invokeable-ns s current-ns env) |
1261 | 1258 |
|
1262 | 1259 | :else |
1263 | | - (do |
| 1260 | + (when default? |
1264 | 1261 | (when (some? confirm) |
1265 | 1262 | (confirm env current-ns sym)) |
1266 | 1263 | (merge (gets @env/*compiler* ::namespaces current-ns :defs sym) |
|
0 commit comments