 (def ^:dynamic *cljs-warn-fn-arity* true)
 (def ^:dynamic *unchecked-if* (atom false))
 (def ^:dynamic *cljs-static-fns* false)
-(def ^:dynamic *position* nil)
+
+(def ^:dynamic *cljs-mappings* nil)
+(def ^:dynamic *cljs-gen-col* nil)
 
 (defmacro ^:private debug-prn
   [& args]

      (binding [*out* out
                *cljs-ns* 'cljs.user
                *cljs-file* (.getPath ^java.io.File src)
                *position* (atom {:gline 0 :gcol 0})]
        (loop [forms (forms-seq src)
               ns-name nil
               deps nil]

(defn emits [& xs]
  (doseq [x xs]
    (cond
     (nil? x) nil
     (map? x) (emit x)
     (seq? x) (apply emits x)
     (fn? x)  (x)
     :else (let [m (when (symbol? x)
                     (-> x meta))
                 s (print-str x)]
             (when *cljs-mappings*
               (swap! *cljs-mappings*
                      (fn [lines]
                        (let [last (conj (peek lines)
                                         {:gline (count lines)
                                          :gcol *cljs-gen-col*
                                          :line (when m (:line m))
                                          :col 0
                                          :name (when m (str (:name m)))})]
                          (conj (pop lines) last))))
               (swap! *cljs-gen-col* (fn [col] (+ col (count s)))))
             (print s))))
  nil)

(defn ^String emit-str [expr]
