0.8.11.3:
authorChristophe Rhodes <csr21@cam.ac.uk>
Tue, 8 Jun 2004 12:49:17 +0000 (12:49 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Tue, 8 Jun 2004 12:49:17 +0000 (12:49 +0000)
Fix backquote pretty-printing bug (reported by Brian Downing
sbcl-devel 2004-06-06)
... don't destroy list structure in the process of printing!

NEWS
src/code/pp-backq.lisp
tests/backq.impure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index e3abb05..e5ee195 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2524,6 +2524,8 @@ changes in sbcl-0.8.12 relative to sbcl-0.8.11:
     string for information on the protocol.
   * fixed bug 335: ATANH now computes the inverse hyperbolic tangent
     even for difficult arguments.  (reported by Peter Graves)
+  * fixed a bug in backquote printing: no more modification of the
+    form's list structure.  (reported by Brian Downing)
 
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
index 9c4c7c9..cfbb8fa 100644 (file)
@@ -35,8 +35,8 @@
    ((atom form)
     (backq-unparse-expr form splicing))
    ((not (null (cdr (last form))))
-    ;; FIXME: Shouldn't this be an ERROR?
-    "### illegal dotted backquote form ###")
+    ;; FIXME: this probably throws a recursive error
+    (bug "found illegal dotted backquote form: ~S" form))
    (t
     (case (car form)
       (backq-list
                   (backq-unparse (car tail) t)))
         (push (backq-unparse (car tail)) accum)))
       (backq-append
-       (mapcan (lambda (el) (backq-unparse el t))
+       (mapcar (lambda (el) (backq-unparse el t))
               (cdr form)))
       (backq-nconc
-       (mapcan (lambda (el) (backq-unparse el :nconc))
+       (mapcar (lambda (el) (backq-unparse el :nconc))
               (cdr form)))
       (backq-cons
        (cons (backq-unparse (cadr form) nil)
index a9be79b..ffdeb93 100644 (file)
@@ -55,5 +55,8 @@
        (test-double-backquote (car test) (cdr test)))
       *backquote-tests*)
 
+(let ((string "`(foobar a b ,c ,'(e f g) d ,@'(e f g) (h i j) ,@foo)"))
+  (assert (equal (print (read-from-string string)) (read-from-string string))))
+
 ;;; success
 (quit :unix-status 104)
index fc137e7..9f63546 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.11.2"
+"0.8.11.3"