 ;   You must not remove this notice, or any other, from this software.
 
 (ns cljs.source-map
-  (:require [clojure.string :as string]
+  (:require [goog.object :as gobj]
+            [clojure.string :as string]
             [clojure.set :as set]
             [cljs.source-map.base64-vlq :as base64-vlq]))
 

                   (let [segs (seq (string/split line #","))]
                     (loop [segs segs relseg relseg result result]
                       (if segs
                         (let [seg (first segs)
                               nrelseg (seg-combine (base64-vlq/decode seg) relseg)]
                           (recur (next segs) nrelseg
                             (update-result result (seg->map nrelseg source-map) gline)))

  mapping original ClojureScript source locations to the generated
  JavaScript."
  ([source-map]
   (decode-reverse
     (gobj/get source-map "mappings") source-map))
  ([mappings source-map]
   (let [sources     (gobj/get source-map "sources")
         relseg-init [0 0 0 0 0]
         lines       (seq (string/split mappings #";"))]
     (loop [gline  0
            lines  lines
            relseg relseg-init
            result (sorted-map-by (source-compare sources))]
       (if lines
         (let [line (first lines)
               [result relseg]
               (if (string/blank? line)
                 [result relseg]
                 (let [segs (seq (string/split line #","))]
                   (loop [segs segs relseg relseg result result]
                     (if segs
                       (let [seg (first segs)
                             nrelseg (seg-combine (base64-vlq/decode seg) relseg)]
                         (recur (next segs) nrelseg
                           (update-reverse-result result (seg->map nrelseg source-map) gline)))
                       [result relseg]))))]
           (recur (inc gline) (next lines) (assoc relseg 0 0) result))
         result)))))

(defn update-result
  "Helper for decode. Take a source map and update it based on a
  segment map."
  [result segmap gline]
  (let [{:keys [gcol source line col name]} segmap
        d {:line   line
           :col    col
           :source source}
        d (if name (assoc d :name name) d)]
    (update-in result [gline]
