Skip to content

Commit b924f8e

Browse files
committed
source maps work with incremental compilation now
1 parent 2971f80 commit b924f8e

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

src/clj/cljs/compiler.clj

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
[clojure.string :as string]
1515
[clojure.tools.reader :as reader]
1616
[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))
1921

2022
(def js-reserved
2123
#{"abstract" "boolean" "break" "byte" "case"
@@ -825,6 +827,9 @@
825827
(ana/analyze-file "cljs/core.cljs"))
826828
~@body))
827829

830+
(defn url-path [^File f]
831+
(.getPath (.toURL (.toURI f))))
832+
828833
(defn compile-file*
829834
([src dest] (compile-file* src dest nil))
830835
([src dest opts]
@@ -849,20 +854,32 @@
849854
(if (= (:op ast) :ns)
850855
(recur (rest forms) (:name ast) (merge (:uses ast) (:requires ast)))
851856
(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*}))))))))))
866883

867884
(defn requires-compilation?
868885
"Return true if the src file requires compilation."

0 commit comments

Comments
 (0)