- (cond ((null code) (values nil nil))
- ((or (numberp code)
- (eq code t))
- ;; Keywords are self-evaluating. Install after packages.
- (values t code))
- (t (values 'quote code))))
- ((or (eq (car code) *bq-at-flag*)
- (eq (car code) *bq-dot-flag*))
- (values (car code) (cdr code)))
- ((eq (car code) *bq-comma-flag*)
- (comma (cdr code)))
- ((eq (car code) *bq-vector-flag*)
- (multiple-value-bind (dflag d) (backquotify stream (cdr code))
- (values 'vector (backquotify-1 dflag d))))
- (t (multiple-value-bind (aflag a) (backquotify stream (car code))
- (multiple-value-bind (dflag d) (backquotify stream (cdr code))
- (if (eq dflag *bq-at-flag*)
- ;; Get the errors later.
- (%reader-error stream ",@ after dot in ~S" code))
- (if (eq dflag *bq-dot-flag*)
- (%reader-error stream ",. after dot in ~S" code))
- (cond
- ((eq aflag *bq-at-flag*)
- (if (null dflag)
- (comma a)
- (values 'append
- (cond ((eq dflag 'append)
- (cons a d ))
- (t (list a (backquotify-1 dflag d)))))))
- ((eq aflag *bq-dot-flag*)
- (if (null dflag)
- (comma a)
- (values 'nconc
- (cond ((eq dflag 'nconc)
- (cons a d))
- (t (list a (backquotify-1 dflag d)))))))
- ((null dflag)
- (if (member aflag '(quote t nil))
- (values 'quote (list a))
- (values 'list (list (backquotify-1 aflag a)))))
- ((member dflag '(quote t))
- (if (member aflag '(quote t nil))
- (values 'quote (cons a d ))
- (values 'list* (list (backquotify-1 aflag a)
- (backquotify-1 dflag d)))))
- (t (setq a (backquotify-1 aflag a))
- (if (member dflag '(list list*))
- (values dflag (cons a d))
- (values 'list*
- (list a (backquotify-1 dflag d)))))))))))
+ (cond ((null code) (values nil nil))
+ ((or (consp code)
+ (symbolp code))
+ ;; Keywords are self-evaluating. Install after packages.
+ (values 'quote code))
+ (t (values t code))))
+ ((or (eq (car code) *bq-at-flag*)
+ (eq (car code) *bq-dot-flag*))
+ (values (car code) (cdr code)))
+ ((eq (car code) *bq-comma-flag*)
+ (comma (cdr code)))
+ ((eq (car code) *bq-vector-flag*)
+ (multiple-value-bind (dflag d) (backquotify stream (cdr code))
+ (values 'vector (backquotify-1 dflag d))))
+ (t (multiple-value-bind (aflag a) (backquotify stream (car code))
+ (multiple-value-bind (dflag d) (backquotify stream (cdr code))
+ (when (eq dflag *bq-at-flag*)
+ ;; Get the errors later.
+ (simple-reader-error stream ",@ after dot in ~S" code))
+ (when (eq dflag *bq-dot-flag*)
+ (simple-reader-error stream ",. after dot in ~S" code))
+ (cond
+ ((eq aflag *bq-at-flag*)
+ (if (null dflag)
+ (if (expandable-backq-expression-p a)
+ (values 'append (list a))
+ (comma a))
+ (values 'append
+ (cond ((eq dflag 'append)
+ (cons a d ))
+ (t (list a (backquotify-1 dflag d)))))))
+ ((eq aflag *bq-dot-flag*)
+ (if (null dflag)
+ (if (expandable-backq-expression-p a)
+ (values 'nconc (list a))
+ (comma a))
+ (values 'nconc
+ (cond ((eq dflag 'nconc)
+ (cons a d))
+ (t (list a (backquotify-1 dflag d)))))))
+ ((null dflag)
+ (if (member aflag '(quote t nil))
+ (values 'quote (list a))
+ (values 'list (list (backquotify-1 aflag a)))))
+ ((member dflag '(quote t))
+ (if (member aflag '(quote t nil))
+ (values 'quote (cons a d ))
+ (values 'list* (list (backquotify-1 aflag a)
+ (backquotify-1 dflag d)))))
+ (t (setq a (backquotify-1 aflag a))
+ (if (member dflag '(list list*))
+ (values dflag (cons a d))
+ (values 'list*
+ (list a (backquotify-1 dflag d)))))))))))
+
+(/show0 "backq.lisp 139")