|
14 | 14 | [clojure.string :as string]
|
15 | 15 | [clojure.tools.reader :as reader]
|
16 | 16 | [cljs.tagged-literals :as tags]
|
17 |
| - [cljs.analyzer :as ana]) |
18 |
| - (:import java.lang.StringBuilder)) |
| 17 | + [cljs.analyzer :as ana] |
| 18 | + [cljs.source-map :as sm]) |
| 19 | + (:import java.lang.StringBuilder |
| 20 | + java.io.File)) |
19 | 21 |
|
20 | 22 | (def js-reserved
|
21 | 23 | #{"abstract" "boolean" "break" "byte" "case"
|
|
825 | 827 | (ana/analyze-file "cljs/core.cljs"))
|
826 | 828 | ~@body))
|
827 | 829 |
|
| 830 | +(defn url-path [^File f] |
| 831 | + (.getPath (.toURL (.toURI f)))) |
| 832 | + |
828 | 833 | (defn compile-file*
|
829 | 834 | ([src dest] (compile-file* src dest nil))
|
830 | 835 | ([src dest opts]
|
|
849 | 854 | (if (= (:op ast) :ns)
|
850 | 855 | (recur (rest forms) (:name ast) (merge (:uses ast) (:requires ast)))
|
851 | 856 | (recur (rest forms) ns-name deps))))
|
852 |
| - (merge |
853 |
| - {:ns (or ns-name 'cljs.user) |
854 |
| - :provides [ns-name] |
855 |
| - :requires (if (= ns-name 'cljs.core) |
856 |
| - (set (vals deps)) |
857 |
| - (set |
858 |
| - (remove nil? |
859 |
| - (conj (set (vals deps)) 'cljs.core |
860 |
| - (when ana/*track-constants* 'constants-table))))) |
861 |
| - :file dest |
862 |
| - :source-file src |
863 |
| - :lines @*cljs-gen-line*} |
864 |
| - (when (:source-map opts) |
865 |
| - {:source-map @*cljs-source-map*}))))))))) |
| 857 | + (do |
| 858 | + (when (and (:source-map opts) |
| 859 | + (= (:optimizations opts) :none)) |
| 860 | + (let [sm-file (io/file (str (.getPath ^java.io.File dest) ".map"))] |
| 861 | + (emits "\n//@ sourceMappingURL=" (.getName sm-file)) |
| 862 | + (spit sm-file |
| 863 | + (sm/encode {(url-path src) @*cljs-source-map*} |
| 864 | + {:lines (+ @*cljs-gen-line* 2) |
| 865 | + :file (url-path dest)})))) |
| 866 | + (merge |
| 867 | + {:ns (or ns-name 'cljs.user) |
| 868 | + :provides [ns-name] |
| 869 | + :requires (if (= ns-name 'cljs.core) |
| 870 | + (set (vals deps)) |
| 871 | + (set |
| 872 | + (remove nil? |
| 873 | + (conj (set (vals deps)) 'cljs.core |
| 874 | + (when ana/*track-constants* 'constants-table))))) |
| 875 | + :file dest |
| 876 | + :source-file src |
| 877 | + :lines (+ @*cljs-gen-line* |
| 878 | + (if (and (:source-map opts) |
| 879 | + (= (:optimizations opts) :none)) |
| 880 | + 2 0))} |
| 881 | + (when (:source-map opts) |
| 882 | + {:source-map @*cljs-source-map*})))))))))) |
866 | 883 |
|
867 | 884 | (defn requires-compilation?
|
868 | 885 | "Return true if the src file requires compilation."
|
|
0 commit comments