      ((:print opts) value))
    (when-let [st (:stacktrace ret)]
      (if (and (true? (:source-map opts))
-           (satisfies? IParseStacktrace repl-env))
+              (satisfies? IParseStacktrace repl-env))
        (let [cst (-parse-stacktrace repl-env st ret opts)]
          (if (vector? cst)
            (if (satisfies? IPrintStacktrace repl-env)

(defmacro source
  "Prints the source code for the given symbol, if it can find it.
  This requires that the symbol resolve to a Var defined in a
  namespace for which the .clj is in the classpath.

  Example: (source filter)"
  [n]

  `(doseq [sym# (quote ~(sort (keys (ana-api/ns-publics ns))))]
     (println sym#)))

(defmacro pst
  ([] `(pst *e))
  ([e]
   (let [{:keys [repl-env] :as env} &env]
     (when (and e repl-env)
       (let [ret (edn/read-string
                   (evaluate-form repl-env env "<cljs repl>"
                     `(when ~e
                        (pr-str
                          {:value (.-message ~e)
                           :stacktrace (.-stack ~e)}))))]
         (when ret
           (let [ret (update-in ret [:value]
                       (fn [msg]
                         (if (satisfies? IParseErrorMessage repl-env)
                           (-parse-error-message repl-env msg ret *repl-opts*)
                           msg)))]
             (display-error repl-env ret nil *repl-opts*))))))))
