(sb!xc:deftype signed-byte (&optional s)
(cond ((eq s '*) 'integer)
- ((and (integerp s) (> s 1))
+ ((and (integerp s) (> s 0))
(let ((bound (ash 1 (1- s))))
`(integer ,(- bound) ,(1- bound))))
(t
(t
(error "bad size specified for UNSIGNED-BYTE type specifier: ~S" s))))
+;;; ANSI got UNSIGNED-BYTE wrong, prohibiting (UNSIGNED-BYTE 0).
+;;; Since this is actually a substantial impediment to clarity...
+(sb!xc:deftype unsigned-byte* (&optional s)
+ (cond
+ ((eq s '*) '(integer 0))
+ ((zerop s) '(integer 0 0))
+ (t `(unsigned-byte ,s))))
+
(sb!xc:deftype bit () '(integer 0 1))
(sb!xc:deftype compiled-function () 'function)
;;; semistandard types
(sb!xc:deftype generalized-boolean () t)
+(sb!xc:deftype format-control ()
+ '(or string function))
+
+(sb!xc:deftype restart-designator ()
+ '(or (and symbol (not null)) restart))
+
;;; array rank, total size...
(sb!xc:deftype array-rank () `(integer 0 (,sb!xc:array-rank-limit)))
(sb!xc:deftype array-total-size ()