- (when (and data-type (sb!xc:subtypep data-type 'number))
- (let ((init (if step-var-p 1 0)))
- (flet ((like (&rest types)
- (coerce init (find-if (lambda (type)
- (sb!xc:subtypep data-type type))
- types))))
- (cond ((sb!xc:subtypep data-type 'float)
- (like 'single-float 'double-float
- 'short-float 'long-float 'float))
- ((sb!xc:subtypep data-type '(complex float))
- (like '(complex single-float)
- '(complex double-float)
- '(complex short-float)
- '(complex long-float)
- '(complex float)))
- (t
- init))))))
+ (cond ((null data-type)
+ nil)
+ ((sb!xc:subtypep data-type 'number)
+ (let ((init (if step-var-p 1 0)))
+ (flet ((like (&rest types)
+ (coerce init (find-if (lambda (type)
+ (sb!xc:subtypep data-type type))
+ types))))
+ (cond ((sb!xc:subtypep data-type 'float)
+ (like 'single-float 'double-float
+ 'short-float 'long-float 'float))
+ ((sb!xc:subtypep data-type '(complex float))
+ (like '(complex single-float)
+ '(complex double-float)
+ '(complex short-float)
+ '(complex long-float)
+ '(complex float)))
+ (t
+ init)))))
+ ((sb!xc:subtypep data-type 'vector)
+ (let ((ctype (sb!kernel:specifier-type data-type)))
+ (when (sb!kernel:array-type-p ctype)
+ (let ((etype (sb!kernel:type-*-to-t
+ (sb!kernel:array-type-specialized-element-type ctype))))
+ (make-array 0 :element-type (sb!kernel:type-specifier etype))))))
+ (t
+ nil)))