anchor.diff:              (case ch
                 (#\0 (vector-push-extend 0 bits))
                 (#\1 (vector-push-extend 1 bits))
  -              (t (error "Invalid character ~S in #*." ch)))))
  +              (t (error 'simple-reader-error :stream stream
  +                        :format-control "Invalid character ~S in #*."
  +                        :format-arguments (list ch))))))
       (when (and p (not (zerop p)) (zerop (length bits)))
  -      (error "Need at least one bit for #* with an explicit length."))
  +      (error 'simple-reader-error :stream stream
  +             :format-control "Need at least one bit for #* with an explicit length."
  +             :format-arguments '()))
       (when (and p (> (length bits) p))
  -      (error "Too many bits."))
  +      (error 'simple-reader-error :stream stream
  +             :format-control "Too many bits."
  +             :format-arguments '()))
       (let ((final-array (make-array (or p (length bits))
                                      :element-type 'bit)))
         (unless (zerop (length final-array))
  
positive.code:            (return-from read-ratio))
           (setf denominator (+ (* denominator *read-base*)
                                weight))))
      (/ numerator denominator)))
  
  (defvar *exponent-markers* "DdEeFfLlSs")
  
negative.code:       ;; Attempt to parse a number.
        (t (or (read-integer token)
               (read-float token)
               (read-ratio token stream)
               (intern token))))))
  
  (defun read-ratio (string stream)
    ;; ratio = sign? digits+ slash digits+
    (let ((numerator nil)
          (denominator nil)
  