- `((array-header-p ,obj)
- ,@(when (eq (array-type-dimensions stype) '*)
- `((= (%array-rank ,obj) ,(length dims))))
- ,@(loop for d in dims
- for i from 0
- unless (eq '* d)
- collect `(= (%array-dimension ,obj ,i) ,d))))
- ((and dims (csubtypep stype (specifier-type 'simple-array)))
- `((not (array-header-p ,obj))
- ,@(unless (eq '* (car dims))
- `((= (vector-length ,obj) ,@dims)))))
- ((and dims (csubtypep stype (specifier-type '(and array (not simple-array)))))
- `((array-header-p ,obj)
- ,@(unless (eq '* (car dims))
- `((= (%array-dimension ,obj 0) ,@dims)))))
- (dims
- (unless (eq '* (car dims))
- `((if (array-header-p ,obj)
- (= (%array-dimension ,obj 0) ,@dims)
- (= (vector-length ,obj) ,@dims)))))))))
+ (values `((array-header-p ,obj)
+ ,@(when (eq (array-type-dimensions stype) '*)
+ `((= (%array-rank ,obj) ,(length dims))))
+ ,@(loop for d in dims
+ for i from 0
+ unless (eq '* d)
+ collect `(= (%array-dimension ,obj ,i) ,d)))
+ t))
+ ((not dims)
+ (values `((array-header-p ,obj)
+ (= (%array-rank ,obj) 0))
+ t))
+ ((not (array-type-complexp type))
+ (if (csubtypep stype (specifier-type 'vector))
+ (values (unless (eq '* (car dims))
+ `((= (vector-length ,obj) ,@dims)))
+ nil)
+ (values (if (eq '* (car dims))
+ `((not (array-header-p ,obj)))
+ `((not (array-header-p ,obj))
+ (= (vector-length ,obj) ,@dims)))
+ nil)))
+ (t
+ (values (unless (eq '* (car dims))
+ `((if (array-header-p ,obj)
+ (= (%array-dimension ,obj 0) ,@dims)
+ (= (vector-length ,obj) ,@dims))))
+ nil))))))