Skip to content

Instantly share code, notes, and snippets.

@cemerick
Last active August 29, 2015 14:21
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cemerick/c8ed5730b0055f41cbef to your computer and use it in GitHub Desktop.
Save cemerick/c8ed5730b0055f41cbef to your computer and use it in GitHub Desktop.
user.clj to recover pre-1.7.0 printing of Objects and Throwables in the REPL
; add to your user.clj to recover pre-1.7.0 printing of Objects and Throwables in the REPL
; https://github.com/clojure/clojure/blob/master/changes.md#17-printing-as-data
(in-ns 'clojure.core)
; from 1242c48
(defn- print-object [o, ^Writer w]
(when (instance? clojure.lang.IMeta o)
(print-meta o w))
(.write w "#<")
(let [name (.getSimpleName (class o))]
(when (seq name) ;; anonymous classes have a simple name of ""
(.write w name)
(.write w " ")))
(.write w (str o))
(.write w ">"))
(defmethod print-method Throwable [^Throwable o ^Writer w]
(print-object o w))
### Clojure <= 1.6.0
chas@t440p:~$ java -cp ~/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar clojure.main
Clojure 1.6.0
user=> (inc Long/MAX_VALUE)
ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1424)
user=> *e
#<ArithmeticException java.lang.ArithmeticException: integer overflow>
### Clojure >= 1.7.0-alpha6
chas@t440p:~$ java -cp ~/.m2/repository/org/clojure/clojure/1.7.0-beta3/clojure-1.7.0-beta3.jar clojure.main
Clojure 1.7.0-beta3
user=> (inc Long/MAX_VALUE)
ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501)
user=> *e
#error {
:cause "integer overflow"
:via
[{:type java.lang.ArithmeticException
:message "integer overflow"
:at [clojure.lang.Numbers throwIntOverflow "Numbers.java" 1501]}]
:trace
[[clojure.lang.Numbers throwIntOverflow "Numbers.java" 1501]
[clojure.lang.Numbers inc "Numbers.java" 1839]
[user$eval1 invoke "NO_SOURCE_FILE" 1]
[clojure.lang.Compiler eval "Compiler.java" 6792]
[clojure.lang.Compiler eval "Compiler.java" 6755]
[clojure.core$eval invoke "core.clj" 3079]
[clojure.main$repl$read_eval_print__7095$fn__7098 invoke "main.clj" 240]
[clojure.main$repl$read_eval_print__7095 invoke "main.clj" 240]
[clojure.main$repl$fn__7104 invoke "main.clj" 258]
[clojure.main$repl doInvoke "main.clj" 258]
[clojure.lang.RestFn invoke "RestFn.java" 421]
[clojure.main$repl_opt invoke "main.clj" 324]
[clojure.main$main doInvoke "main.clj" 422]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.Var invoke "Var.java" 375]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.Var applyTo "Var.java" 700]
[clojure.main main "main.java" 37]]}
user=>
@cemerick
Copy link
Author

some irc discussion available here: http://clojure-log.n01se.net/date/2015-05-19.html#10:40

@laurentpetit
Copy link

Seems to me like to fix the behavior in 1.8, we could read the value of print-readable and adapt the print-object function to it. See the thread I started on clojure-dev : https://groups.google.com/d/msg/clojure-dev/uE15_9dK-CA/tOkk7p7GT-QJ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment