    identifier delimited by angle brackets. The returned mapped stacktrace will
    also contain :url entries to the original sources if it can be determined
    from the classpath."
-  ([stacktrace sm] (mapped-stacktrace stacktrace sm nil))
-  ([stacktrace sm opts]
+  ([stacktrace sms]
+   (mapped-stacktrace stacktrace sms nil))
+  ([stacktrace sms opts]
    (letfn [(call->function [x]
              (if (:call x)
                (hash-map :function (:call x))

              (concat (rest (map call->function mapped-frames)) [{}])))))))

(defn mapped-stacktrace-str
  "Given a vector representing the canonicalized JavaScript stacktrace
   print the ClojureScript stacktrace. See mapped-stacktrace."
  ([stacktrace sm]
   (mapped-stacktrace-str stacktrace sm nil))
  ([stacktrace sm opts]
   (with-out-str
     (doseq [{:keys [function file line column]}
             (mapped-stacktrace stacktrace sm opts)]
       (println "\t"
         (str (when function (str function " "))
              "(" file (when line (str ":" line))

                   unmunged-call-name
                   munged-fn-name))
               function call))]
     (let [mapped-frames (map (memoize #(mapped-frame % sms opts)) stacktrace)]
       ;; take each non-nil :call and optionally merge it into :function one-level
       ;; up to avoid replacing with local symbols, we only replace munged name if
       ;; we can munge call symbol back to it
