summaryrefslogtreecommitdiff
path: root/src/clj/clojure/core_print.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clj/clojure/core_print.clj')
-rw-r--r--src/clj/clojure/core_print.clj28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/clj/clojure/core_print.clj b/src/clj/clojure/core_print.clj
index bde2af9e..f38e6e40 100644
--- a/src/clj/clojure/core_print.clj
+++ b/src/clj/clojure/core_print.clj
@@ -33,7 +33,9 @@
*print-level*, the printer prints '#' to represent it. The root binding
is nil indicating no limit."
:added "1.0"}
-*print-level* nil)
+ *print-level* nil)
+
+(def ^:dynamic *verbose-defrecords* false)
(defn- print-sequential [^String begin, print-one, ^String sep, ^String end, sequence, ^Writer w]
(binding [*print-level* (and (not *print-dup*) *print-level* (dec *print-level*))]
@@ -150,6 +152,7 @@
(print-ctor o #(print-sequential "[" print-dup " " "]" %1 %2) w))
(defmethod print-dup clojure.lang.IPersistentCollection [o, ^Writer w]
+ (print " ipcpd ")
(print-meta o w)
(.write w "#=(")
(.write w (.getName ^Class (class o)))
@@ -191,7 +194,7 @@
(defn- print-map [m print-one w]
(print-sequential
"{"
- (fn [e ^Writer w]
+ (fn [e ^Writer w]
(do (print-one (key e) w) (.append w \space) (print-one (val e) w)))
", "
"}"
@@ -212,7 +215,26 @@
(print-map m print-dup w)
(.write w ")"))
+(defmethod print-method clojure.lang.IRecord [r, ^Writer w]
+ (print-meta r w)
+ (.write w "#")
+ (.write w (.getName (class r)))
+ (print-map r pr-on w))
+
+(defmethod print-dup clojure.lang.IRecord [r, ^Writer w]
+ (print-meta r w)
+ (.write w "#")
+ (.write w (.getName (class r)))
+ (if *verbose-defrecords*
+ (print-map r print-dup w)
+ (print-sequential "[" pr-on ", " "]" (vals r) w)))
+
+(prefer-method print-method clojure.lang.IRecord java.util.Map)
+(prefer-method print-method clojure.lang.IRecord clojure.lang.IPersistentMap)
+(prefer-method print-dup clojure.lang.IRecord clojure.lang.IPersistentMap)
(prefer-method print-dup clojure.lang.IPersistentCollection java.util.Map)
+(prefer-method print-dup clojure.lang.IRecord clojure.lang.IPersistentCollection)
+(prefer-method print-dup clojure.lang.IRecord java.util.Map)
(defmethod print-method clojure.lang.IPersistentSet [s, ^Writer w]
(print-meta s w)
@@ -244,7 +266,7 @@
(defmethod print-dup java.math.BigDecimal [o w] (print-method o w))
(defmethod print-dup clojure.lang.BigInt [o w] (print-method o w))
(defmethod print-dup java.math.BigInteger [o w] (print-method o w))
-(defmethod print-dup clojure.lang.PersistentHashMap [o w] (print-method o w))
+(defmethod print-dup clojure.lang.PersistentHashMap [o w] (print " phmpd ") (print-method o w))
(defmethod print-dup clojure.lang.PersistentHashSet [o w] (print-method o w))
(defmethod print-dup clojure.lang.PersistentVector [o w] (print-method o w))
(defmethod print-dup clojure.lang.LazilyPersistentVector [o w] (print-method o w))