|
4334 | 4334 | (.lastIndexOf full-name "."))] |
4335 | 4335 | (symbol (str "cljs.user." name (util/content-sha full-name 7))))))) |
4336 | 4336 |
|
4337 | | -#?(:clj |
4338 | | - (defn macro-call? [form env] |
4339 | | - (when (and (seq? form) (seq form) (and (symbol? (first form)))) |
4340 | | - (let [sym (first form) |
4341 | | - nstr (namespace sym)] |
4342 | | - (or (and (some? nstr) |
4343 | | - (some? (gets env :ns :require-macros (symbol nstr)))) |
4344 | | - (some? (gets env :ns :rename-macros sym)) |
4345 | | - (some? (gets env :ns :use-macros sym))))))) |
4346 | | - |
4347 | | -#?(:clj |
4348 | | - (declare ns-side-effects macroexpand-1)) |
4349 | | - |
4350 | 4337 | #?(:clj |
4351 | 4338 | (defn ^:dynamic parse-ns |
4352 | 4339 | "Helper for parsing only the essential namespace information from a |
|
4372 | 4359 | (binding [env/*compiler* (if (false? (:restore opts)) |
4373 | 4360 | env/*compiler* |
4374 | 4361 | (atom @env/*compiler*)) |
4375 | | - *file-defs* nil |
4376 | | - #?@(:clj [*unchecked-if* false |
4377 | | - *unchecked-arrays* false]) |
4378 | 4362 | *cljs-ns* 'cljs.user |
4379 | 4363 | *cljs-file* src |
4380 | 4364 | *macro-infer* |
|
4391 | 4375 | false)] |
4392 | 4376 | (let [rdr (when-not (sequential? src) (io/reader src))] |
4393 | 4377 | (try |
4394 | | - (loop [env (empty-env) |
4395 | | - forms (if rdr |
| 4378 | + (loop [forms (if rdr |
4396 | 4379 | (forms-seq* rdr (source-path src)) |
4397 | 4380 | src) |
4398 | 4381 | ret (merge |
|
4407 | 4390 | {:lines (with-open [reader (io/reader dest)] |
4408 | 4391 | (-> reader line-seq count))}))] |
4409 | 4392 | (if (seq forms) |
4410 | | - (let [form (first forms) |
4411 | | - macro? (macro-call? form env) |
4412 | | - env (if macro? |
4413 | | - (binding [*load-macros* true] |
4414 | | - (assoc (:env (ns-side-effects env (:ast ret) opts)) :ns (:ns env))) |
4415 | | - env) |
4416 | | - ast (when (or macro? (and (seq? form) ('#{ns ns* require use require-macros} (first form)))) |
4417 | | - (no-warn (analyze env form nil opts))) |
4418 | | - env (assoc (:env ast) :ns (:ns env))] |
| 4393 | + (let [env (empty-env) |
| 4394 | + ast (no-warn (analyze env (first forms) nil opts))] |
4419 | 4395 | (cond |
4420 | 4396 | (= :ns (:op ast)) |
4421 | 4397 | (let [ns-name (:name ast) |
4422 | 4398 | ns-name (if (and (= 'cljs.core ns-name) |
4423 | 4399 | (= "cljc" (util/ext src))) |
4424 | 4400 | 'cljs.core$macros |
4425 | 4401 | ns-name) |
4426 | | - deps (merge (:uses ast) (:requires ast)) |
4427 | | - env (assoc (:env ast) :ns (dissoc ast :env))] |
4428 | | - (recur env |
4429 | | - (rest forms) |
4430 | | - (cond-> |
4431 | | - {:ns (or ns-name 'cljs.user) |
4432 | | - :provides [ns-name] |
4433 | | - :requires (if (= 'cljs.core ns-name) |
4434 | | - (set (vals deps)) |
4435 | | - (cond-> (conj (set (vals deps)) 'cljs.core) |
4436 | | - (get-in @env/*compiler* [:options :emit-constants]) |
4437 | | - (conj constants-ns-sym))) |
4438 | | - :file dest |
4439 | | - :source-file (when rdr src) |
4440 | | - :source-forms (when-not rdr src) |
4441 | | - :ast ast |
4442 | | - :macros-ns (or (:macros-ns opts) |
4443 | | - (= 'cljs.core$macros ns-name))} |
4444 | | - (and dest (.exists ^File dest)) |
4445 | | - (assoc :lines (with-open [reader (io/reader dest)] |
4446 | | - (-> reader line-seq count)))))) |
| 4402 | + deps (merge (:uses ast) (:requires ast))] |
| 4403 | + (merge |
| 4404 | + {:ns (or ns-name 'cljs.user) |
| 4405 | + :provides [ns-name] |
| 4406 | + :requires (if (= 'cljs.core ns-name) |
| 4407 | + (set (vals deps)) |
| 4408 | + (cond-> (conj (set (vals deps)) 'cljs.core) |
| 4409 | + (get-in @env/*compiler* [:options :emit-constants]) |
| 4410 | + (conj constants-ns-sym))) |
| 4411 | + :file dest |
| 4412 | + :source-file (when rdr src) |
| 4413 | + :source-forms (when-not rdr src) |
| 4414 | + :ast ast |
| 4415 | + :macros-ns (or (:macros-ns opts) |
| 4416 | + (= 'cljs.core$macros ns-name))} |
| 4417 | + (when (and dest (.exists ^File dest)) |
| 4418 | + {:lines (with-open [reader (io/reader dest)] |
| 4419 | + (-> reader line-seq count))}))) |
4447 | 4420 |
|
4448 | 4421 | (= :ns* (:op ast)) |
4449 | 4422 | (let [deps (merge (:uses ast) (:requires ast))] |
4450 | | - (recur (:env ast) |
4451 | | - (rest forms) |
4452 | | - (cond-> (update-in ret [:requires] into (set (vals deps))) |
4453 | | - ;; we need to defer generating the user namespace |
4454 | | - ;; until we actually need or it will break when |
4455 | | - ;; `src` is a sequence of forms - António Monteiro |
4456 | | - (not (:ns ret)) |
4457 | | - (assoc :ns (gen-user-ns src) :provides [(gen-user-ns src)])))) |
| 4423 | + (recur (rest forms) |
| 4424 | + (cond-> (update-in ret [:requires] into (set (vals deps))) |
| 4425 | + ;; we need to defer generating the user namespace |
| 4426 | + ;; until we actually need or it will break when |
| 4427 | + ;; `src` is a sequence of forms - António Monteiro |
| 4428 | + (not (:ns ret)) |
| 4429 | + (assoc :ns (gen-user-ns src) :provides [(gen-user-ns src)])))) |
4458 | 4430 |
|
4459 | 4431 | :else ret)) |
4460 | 4432 | ret)) |
|
0 commit comments