0.8.13.31:
[sbcl.git] / src / code / pp-backq.lisp
index 9c4c7c9..dc5d6ae 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))
-              (cdr form)))
+       (apply #'append
+             (mapcar (lambda (el) (backq-unparse el t))
+                     (cdr form))))
       (backq-nconc
-       (mapcan (lambda (el) (backq-unparse el :nconc))
-              (cdr form)))
+       (apply #'append
+             (mapcar (lambda (el) (backq-unparse el :nconc))
+                     (cdr form))))
       (backq-cons
        (cons (backq-unparse (cadr form) nil)
             (backq-unparse (caddr form) t)))
       (backq-vector
        (coerce (backq-unparse (cadr form)) 'vector))
       (quote
-       (cadr form))
+       (cond
+        ((atom (cadr form)) (cadr form))
+        ((and (consp (cadr form))
+              (member (caadr form) *backq-tokens*))
+         (backq-unparse-expr form splicing))
+        (t (cons (backq-unparse `(quote ,(caadr form)))
+                 (backq-unparse `(quote ,(cdadr form)))))))
       (t
        (backq-unparse-expr form splicing))))))