Last active
August 29, 2015 14:21
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; 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)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### 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=> |
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
some irc discussion available here: http://clojure-log.n01se.net/date/2015-05-19.html#10:40