X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fpp-backq.lisp;h=dc5d6ae62be6334329fbdfc206f4295338e034c3;hb=15d6e7c9a2c3234f95dfe278046fa2fee1b0c007;hp=9c4c7c9f8bc324f58240a4c1e3ba7e2576ca6537;hpb=a0d9e7847b870acfbea98b01469654d01a8cf920;p=sbcl.git diff --git a/src/code/pp-backq.lisp b/src/code/pp-backq.lisp index 9c4c7c9..dc5d6ae 100644 --- a/src/code/pp-backq.lisp +++ b/src/code/pp-backq.lisp @@ -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 @@ -49,18 +49,26 @@ (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))))))