\f
;;;; standard types
-;;; also has a definition in src/code/class.lisp, but we need it
-;;; earlier for array specialization.
-(sb!xc:deftype fixnum ()
- '(integer #.sb!xc:most-negative-fixnum #.sb!xc:most-positive-fixnum))
-
(sb!xc:deftype boolean () '(member t nil))
(sb!xc:deftype mod (n)
(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)
(sb!xc:deftype extended-char ()
#!+sb-doc
- "Type of characters that aren't base-char's. None in CMU CL."
+ "Type of CHARACTERs that aren't BASE-CHARs."
'(and character (not base-char)))
(sb!xc:deftype standard-char ()
;;; 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 ()