Skip to content

Commit 6bc1352

Browse files
committed
TRDR-67: add loc info to namespaced map literals
1 parent 145b114 commit 6bc1352

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

src/main/cljs/cljs/tools/reader.cljs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,8 @@
754754

755755
(defn- read-namespaced-map
756756
[rdr _ opts pending-forms]
757-
(let [token (read-token rdr :namespaced-map (read-char rdr))]
757+
(let [[start-line start-column] (starting-line-col-info rdr)
758+
token (read-token rdr :namespaced-map (read-char rdr))]
758759
(if-let [ns (cond
759760
(= token ":")
760761
(ns-name *ns*)
@@ -767,16 +768,25 @@
767768

768769
(let [ch (read-past whitespace? rdr)]
769770
(if (identical? ch \{)
770-
(let [items (read-delimited :namespaced-map \} rdr opts pending-forms)]
771+
(let [items (read-delimited :namespaced-map \} rdr opts pending-forms)
772+
[end-line end-column] (ending-line-col-info rdr)]
771773
(when (odd? (count items))
772774
(err/throw-odd-map rdr nil nil items))
773775
(let [keys (namespace-keys (str ns) (take-nth 2 items))
774776
vals (take-nth 2 (rest items))]
775777
(when-not (= (count (set keys)) (count keys))
776778
(err/throw-dup-keys rdr :namespaced-map keys))
777-
(zipmap keys vals)))
778-
(err/throw-ns-map-no-map rdr token)))
779-
(err/throw-bad-ns rdr token))))
779+
(with-meta (zipmap keys vals)
780+
(when start-line
781+
(merge
782+
(when-let [file (get-file-name rdr)]
783+
{:file file})
784+
{:line start-line
785+
:column start-column
786+
:end-line end-line
787+
:end-column end-column})))))
788+
(err/throw-ns-map-no-map rdr token)))
789+
(err/throw-bad-ns rdr token))))
780790

781791
(defn- macros [ch]
782792
(case ch

src/main/clojure/clojure/tools/reader.clj

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,8 @@
752752

753753
(defn- read-namespaced-map
754754
[rdr _ opts pending-forms]
755-
(let [token (read-token rdr :namespaced-map (read-char rdr))]
755+
(let [[start-line start-column] (starting-line-col-info rdr)
756+
token (read-token rdr :namespaced-map (read-char rdr))]
756757
(if-let [ns (cond
757758
(= token ":")
758759
(ns-name *ns*)
@@ -765,13 +766,22 @@
765766

766767
(let [ch (read-past whitespace? rdr)]
767768
(if (identical? ch \{)
768-
(let [items (read-delimited :namespaced-map \} rdr opts pending-forms)]
769+
(let [items (read-delimited :namespaced-map \} rdr opts pending-forms)
770+
[end-line end-column] (ending-line-col-info rdr)]
769771
(when (odd? (count items))
770772
(err/throw-odd-map rdr nil nil items))
771773
(let [keys (take-nth 2 items)
772774
vals (take-nth 2 (rest items))]
773-
774-
(RT/map (to-array (mapcat list (namespace-keys (str ns) keys) vals)))))
775+
(with-meta
776+
(RT/map (to-array (mapcat list (namespace-keys (str ns) keys) vals)))
777+
(when start-line
778+
(merge
779+
(when-let [file (get-file-name rdr)]
780+
{:file file})
781+
{:line start-line
782+
:column start-column
783+
:end-line end-line
784+
:end-column end-column})))))
775785
(err/throw-ns-map-no-map rdr token)))
776786
(err/throw-bad-ns rdr token))))
777787

0 commit comments

Comments
 (0)