|
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