Fix up `print-hash-table`
    
        | author | Steve Losh <steve@stevelosh.com> | 
    
        | date | Tue, 01 Nov 2016 15:51:05 +0000 | 
    
    
        | parents | d49a710b5fcc | 
    
        | children | 1c26cbbe73b6 | 
    
        | branches/tags | (none) | 
    
        | files | losh.lisp | 
Changes
    
--- a/losh.lisp	Tue Nov 01 15:50:54 2016 +0000
+++ b/losh.lisp	Tue Nov 01 15:51:05 2016 +0000
@@ -1353,17 +1353,24 @@
                       (reduce #'max <> :initial-value 0)
                       (clamp 0 20 <>))))
     (print-unreadable-object (hash-table stream :type t :identity nil)
-      (format stream ":test ~A :count ~D {~%~{~{  ~vs ~s~}~%~}}"
-              (hash-table-test hash-table)
-              count
-              (loop
-                :with limit = 40
-                :for key :in keys
-                :for val :in vals
-                :for i :from 0 :to limit
-                :collect (if (= i limit)
-                           (list key-width 'too-many-items (list (- count i) 'more))
-                           (list key-width key val)))))))
+      (princ
+        ;; Something shits the bed and output gets jumbled (in SBCL at least) if
+        ;; we try to print to `stream` directly in the format statement inside
+        ;; `print-unreadable-object`, so instead we can just render to a string
+        ;; and `princ` that.
+        (format nil ":test ~A :count ~D {~%~{~{  ~vs ~s~}~%~}}"
+                (hash-table-test hash-table)
+                count
+                (loop
+                  :with limit = (or *print-length* 40)
+                  :for key :in keys
+                  :for val :in vals
+                  :for i :from 0 :to limit
+                  :collect
+                  (if (= i limit)
+                    (list key-width :too-many-items (list (- count i) :more))
+                    (list key-width key val))))
+        stream))))
 
 
 ;;;; Weightlists