X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fpp-backq.lisp;h=7905ce77ef6066eaecd745500ffb6def13c8936f;hb=3fe0010d2777b41e01ea9b4a0f894cfa40f7df1b;hp=cfbb8fa9fae435c4a1b1f6b757faf6ef8dfb1cec;hpb=d3b83f6dd38eb620ed0377f71d601a07b21146b0;p=sbcl.git diff --git a/src/code/pp-backq.lisp b/src/code/pp-backq.lisp index cfbb8fa..7905ce7 100644 --- a/src/code/pp-backq.lisp +++ b/src/code/pp-backq.lisp @@ -49,18 +49,26 @@ (backq-unparse (car tail) t))) (push (backq-unparse (car tail)) accum))) (backq-append - (mapcar (lambda (el) (backq-unparse el t)) - (cdr form))) + (apply #'append + (mapcar (lambda (el) (backq-unparse el t)) + (cdr form)))) (backq-nconc - (mapcar (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)))))) @@ -75,9 +83,9 @@ (backq-comma (write-char #\, stream)) (backq-comma-at - (princ ",@" stream)) + (write-string ",@" stream)) (backq-comma-dot - (princ ",." stream))) + (write-string ",." stream))) ;; Ha! an example of where the per-process specials for stream ;; attributes rather than per-stream actually makes life easier. ;; Since all of the attributes are shared in the dynamic state, we