use of NCONC in MAKE-LEXENV. (lp#924276)
* bug fix: ENSURE-DIRECTORIES-EXIST now works when *default-pathname-defaults*
contains NAME or TYPE components.
+ * bug fix: PPRINT couldn't print improper lists with CARs being some symbols
+ from CL package, e.g. (loop . 10).
* documentation:
** improved docstrings: REPLACE (lp#965592)
(consp (cdr list))
(cddr list)
;; Filter out (FLET FOO :IN BAR) names.
- (not (eq :in (third list))))
+ (and (consp (cddr list))
+ (not (eq :in (third list)))))
(funcall (formatter
"~:<~^~W~^ ~@_~:<~@{~:<~^~W~^~3I ~:_~/SB!PRETTY:PPRINT-LAMBDA-LIST/~1I~:@_~@{~W~^ ~_~}~:>~^ ~_~}~:>~1I~@:_~@{~W~^ ~_~}~:>")
stream
(defun pprint-defmethod (stream list &rest noise)
(declare (ignore noise))
- (if (consp (third list))
+ (if (and (consp (cdr list))
+ (consp (cddr list))
+ (consp (third list)))
(pprint-defun stream list)
(funcall (formatter
"~:<~^~W~^ ~@_~:I~W~^ ~W~^ ~:_~/SB!PRETTY:PPRINT-LAMBDA-LIST/~1I~@{ ~_~W~}~:>")
(declare (ignore noise))
(destructuring-bind (loop-symbol . clauses) list
(declare (ignore loop-symbol))
- (if (or (null clauses) (consp (car clauses)))
+ (if (or (atom clauses) (consp (car clauses)))
(pprint-spread-fun-call stream list)
(pprint-extended-loop stream list))))
(assert (eq orig (pprint-dispatch 'some-symbol)))
(assert (not (eq alt orig)))))
+(with-test (:name :pprint-improper-list)
+ (let* ((max-length 10)
+ (stream (make-broadcast-stream))
+ (errors
+ (loop for symbol being the symbol in :cl
+ nconc
+ (loop for i from 1 below max-length
+ for list = (cons symbol 10) then (cons symbol list)
+ when (nth-value 1 (ignore-errors (pprint list stream)))
+ collect (format nil "(~{~a ~}~a . 10)" (butlast list) symbol)))))
+ (when errors
+ (error "Can't PPRINT imporper lists: ~a" errors))))
+
\f
;;; success