anchor.diff:                  (eql dimension-spec '*))
               (dimension-spec))
       (values element-type dimension-spec)))
  +)
   
   (defun array-type-p (object type)
     (multiple-value-bind (element-type dimension-spec)
  
positive.code:            (unless displaced-index-offset
               (setf displaced-index-offset 0))
             (%make-array-header +object-tag-array+ displaced-to fill-pointer displaced-index-offset dimensions area))
            ((and (subtypep element-type 'character)
                  (not (subtypep element-type 'nil)))
             (let* ((total-size (apply #'* dimensions))
                    (backing-array (make-simple-array total-size '(unsigned-byte 8) area))
                    (array (%make-array-header +object-tag-string+ backing-array fill-pointer nil dimensions area)))
  
negative.code: (%define-compound-type 'array 'array-type-p)
  (eval-when (:compile-toplevel :load-toplevel :execute)
  (%define-type-symbol 'array 'arrayp)
  (defun compile-array-type (object type)
    (multiple-value-bind (element-type dimension-spec)
        (parse-array-type type)
      (when (not (eql dimension-spec '*))
        ;; Bail on complicated dimensions.
        (return-from compile-array-type nil))
      (case element-type
        ((*) `(arrayp ,object))
        ((bit) `(bit-array-p ,object))
        (t nil))))
  (%define-compound-type-optimizer 'array 'compile-array-type)
  )
  
  (defun upgraded-array-element-type (typespec &optional environment)
  