summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-10-14 11:30:48 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-10-14 15:25:01 -0400
commitda538484009666d17015a5f275d257c2e2b8120f (patch)
tree2ffb612bef0acc8ef0b4093f9d6484a747da0e94
parent50cf43796cc415beb81e25cec26d56834f23eb00 (diff)
#286: repl/pst
- fixed: use Writer instead of PrintWriter - improved: pass either exception or depth to arity-1 version Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/repl.clj33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/clj/clojure/repl.clj b/src/clj/clojure/repl.clj
index 2f50223d..77ef9dad 100644
--- a/src/clj/clojure/repl.clj
+++ b/src/clj/clojure/repl.clj
@@ -131,20 +131,23 @@ str-or-pattern."
most recent repl exception (*e), and a depth of 12."
{:added "1.3"}
([] (pst 12))
- ([depth]
- (when-let [e *e]
- (pst (root-cause e) depth)))
+ ([e-or-depth]
+ (if (instance? Throwable e-or-depth)
+ (pst e-or-depth 12)
+ (when-let [e *e]
+ (pst (root-cause e) e-or-depth))))
([^Throwable e depth]
- (.println *err* (str (-> e class .getSimpleName) " " (.getMessage e)))
- (let [st (.getStackTrace e)
- cause (.getCause e)]
- (doseq [el (take depth
- (remove #(#{"clojure.lang.RestFn" "clojure.lang.AFn"} (.getClassName %))
- st))]
- (.println *err* (str \tab (stack-element-str el))))
- (when cause
- (.println *err* "Caused by:")
- (pst cause (min depth
- (+ 2 (- (count (.getStackTrace cause))
- (count st)))))))))
+ (binding [*out* *err*]
+ (println (str (-> e class .getSimpleName) " " (.getMessage e)))
+ (let [st (.getStackTrace e)
+ cause (.getCause e)]
+ (doseq [el (take depth
+ (remove #(#{"clojure.lang.RestFn" "clojure.lang.AFn"} (.getClassName %))
+ st))]
+ (println (str \tab (stack-element-str el))))
+ (when cause
+ (println "Caused by:")
+ (pst cause (min depth
+ (+ 2 (- (count (.getStackTrace cause))
+ (count st))))))))))