|
31 | 31 | [cljs.source-map :as sm]))
|
32 | 32 | #?(:clj (:import java.lang.StringBuilder
|
33 | 33 | [java.io File Writer]
|
| 34 | + [java.util.concurrent.atomic AtomicLong] |
34 | 35 | [cljs.tagged_literals JSValue])
|
35 | 36 | :cljs (:import [goog.string StringBuffer])))
|
36 | 37 |
|
|
50 | 51 | (def ^:dynamic *recompiled* nil)
|
51 | 52 | (def ^:dynamic *inputs* nil)
|
52 | 53 | (def ^:dynamic *source-map-data* nil)
|
| 54 | +(def ^:dynamic *source-map-data-gen-col* nil) |
53 | 55 | (def ^:dynamic *lexical-renames* {})
|
54 | 56 |
|
55 | 57 | (def cljs-reserved-file-names #{"deps.cljs"})
|
|
183 | 185 | (let [{:keys [line column]} env]
|
184 | 186 | (swap! *source-map-data*
|
185 | 187 | (fn [m]
|
186 |
| - (let [minfo (cond-> {:gcol (:gen-col m) |
| 188 | + (let [minfo (cond-> {:gcol #?(:clj (.get ^AtomicLong *source-map-data-gen-col*) |
| 189 | + :cljs (:gen-col m)) |
187 | 190 | :gline (:gen-line m)}
|
188 | 191 | (#{:var :local :js-var} (:op ast))
|
189 | 192 | (assoc :name (str (-> ast :info :name))))]
|
|
206 | 209 | #?(:clj (seq? a) :cljs (ana/cljs-seq? a)) (apply emits a)
|
207 | 210 | #?(:clj (fn? a) :cljs ^boolean (goog/isFunction a)) (a)
|
208 | 211 | :else (let [^String s (cond-> a (not (string? a)) .toString)]
|
209 |
| - (when-not (nil? *source-map-data*) |
210 |
| - (swap! *source-map-data* |
211 |
| - update-in [:gen-col] #(+ % (count s)))) |
| 212 | + #?(:clj (when-some [^AtomicLong gen-col *source-map-data-gen-col*] |
| 213 | + (.addAndGet gen-col (.length s))) |
| 214 | + :cljs (when-some [sm-data *source-map-data*] |
| 215 | + (swap! sm-data update :gen-col #(+ % (.-length s))))) |
212 | 216 | #?(:clj (.write ^Writer *out* s)
|
213 | 217 | :cljs (print s))))
|
214 | 218 | nil)
|
|
227 | 231 | (defn ^:private _emitln []
|
228 | 232 | (newline)
|
229 | 233 | (when *source-map-data*
|
| 234 | + #?(:clj (.set ^AtomicLong *source-map-data-gen-col* 0)) |
230 | 235 | (swap! *source-map-data*
|
231 | 236 | (fn [{:keys [gen-line] :as m}]
|
232 | 237 | (assoc m
|
233 | 238 | :gen-line (inc gen-line)
|
234 |
| - :gen-col 0)))) |
| 239 | + #?@(:cljs [:gen-col 0]))))) |
235 | 240 | nil)
|
236 | 241 |
|
237 | 242 | (defn emitln
|
|
1498 | 1503 | *source-map-data* (when (:source-map opts)
|
1499 | 1504 | (atom
|
1500 | 1505 | {:source-map (sorted-map)
|
1501 |
| - :gen-col 0 |
1502 | 1506 | :gen-line 0}))
|
| 1507 | + *source-map-data-gen-col* (AtomicLong.) |
1503 | 1508 | find-ns-starts-with (memoize find-ns-starts-with)]
|
1504 | 1509 | (emitln (compiled-by-string opts))
|
1505 | 1510 | (with-open [rdr (io/reader src)]
|
|
1538 | 1543 | :name ns-name}))
|
1539 | 1544 | (emit ast)
|
1540 | 1545 | (recur (rest forms) ns-name deps))))
|
1541 |
| - (let [sm-data (when *source-map-data* @*source-map-data*) |
| 1546 | + (let [sm-data (when *source-map-data* (assoc @*source-map-data* |
| 1547 | + :gen-col (.get ^AtomicLong *source-map-data-gen-col*))) |
1542 | 1548 | ret (merge
|
1543 | 1549 | {:ns (or ns-name 'cljs.user)
|
1544 | 1550 | :macros-ns (:macros-ns opts)
|
|
0 commit comments