0.8.16.9:
[sbcl.git] / src / compiler / generic / vm-typetran.lisp
1 ;;;; This file contains the implementation specific type
2 ;;;; transformation magic. Basically, the various non-standard
3 ;;;; predicates that can be used in TYPEP transformations.
4
5 ;;;; This software is part of the SBCL system. See the README file for
6 ;;;; more information.
7 ;;;;
8 ;;;; This software is derived from the CMU CL system, which was
9 ;;;; written at Carnegie Mellon University and released into the
10 ;;;; public domain. The software is in the public domain and is
11 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
12 ;;;; files for more information.
13
14 (in-package "SB!C")
15 \f
16 ;;;; internal predicates
17
18 ;;; These type predicates are used to implement simple cases of TYPEP.
19 ;;; They shouldn't be used explicitly.
20 (define-type-predicate base-string-p base-string)
21 (define-type-predicate bignump bignum)
22 (define-type-predicate complex-double-float-p (complex double-float))
23 (define-type-predicate complex-single-float-p (complex single-float))
24 #!+long-float
25 (define-type-predicate complex-long-float-p (complex long-float))
26 ;;; (COMPLEX-VECTOR-P isn't here because it's not so much a Lisp-level
27 ;;; type predicate as just a hack to get at the type code so that we
28 ;;; can implement some primitive stuff in Lisp.)
29 (define-type-predicate double-float-p double-float)
30 (define-type-predicate fixnump fixnum)
31 (define-type-predicate long-float-p long-float)
32 (define-type-predicate ratiop ratio)
33 (define-type-predicate short-float-p short-float)
34 (define-type-predicate single-float-p single-float)
35 (define-type-predicate simple-array-p simple-array)
36 (define-type-predicate simple-array-nil-p (simple-array nil (*)))
37 (define-type-predicate simple-array-unsigned-byte-2-p
38                        (simple-array (unsigned-byte 2) (*)))
39 (define-type-predicate simple-array-unsigned-byte-4-p
40                        (simple-array (unsigned-byte 4) (*)))
41 (define-type-predicate simple-array-unsigned-byte-7-p
42                        (simple-array (unsigned-byte 7) (*)))
43 (define-type-predicate simple-array-unsigned-byte-8-p
44                        (simple-array (unsigned-byte 8) (*)))
45 (define-type-predicate simple-array-unsigned-byte-15-p
46                        (simple-array (unsigned-byte 15) (*)))
47 (define-type-predicate simple-array-unsigned-byte-16-p
48                        (simple-array (unsigned-byte 16) (*)))
49 #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
50 (define-type-predicate simple-array-unsigned-byte-29-p
51                        (simple-array (unsigned-byte 29) (*)))
52 (define-type-predicate simple-array-unsigned-byte-31-p
53                        (simple-array (unsigned-byte 31) (*)))
54 (define-type-predicate simple-array-unsigned-byte-32-p
55                        (simple-array (unsigned-byte 32) (*)))
56 #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
57 (define-type-predicate simple-array-unsigned-byte-60-p
58                        (simple-array (unsigned-byte 60) (*)))
59 #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
60 (define-type-predicate simple-array-unsigned-byte-63-p
61                        (simple-array (unsigned-byte 63) (*)))
62 #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
63 (define-type-predicate simple-array-unsigned-byte-64-p
64                        (simple-array (unsigned-byte 64) (*)))
65 (define-type-predicate simple-array-signed-byte-8-p
66                        (simple-array (signed-byte 8) (*)))
67 (define-type-predicate simple-array-signed-byte-16-p
68                        (simple-array (signed-byte 16) (*)))
69 #!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
70 (define-type-predicate simple-array-signed-byte-30-p
71                        (simple-array (signed-byte 30) (*)))
72 (define-type-predicate simple-array-signed-byte-32-p
73                        (simple-array (signed-byte 32) (*)))
74 #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
75 (define-type-predicate simple-array-signed-byte-61-p
76                        (simple-array (signed-byte 61) (*)))
77 #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
78 (define-type-predicate simple-array-signed-byte-64-p
79                        (simple-array (signed-byte 64) (*)))
80 (define-type-predicate simple-array-single-float-p
81                        (simple-array single-float (*)))
82 (define-type-predicate simple-array-double-float-p
83                        (simple-array double-float (*)))
84 #!+long-float
85 (define-type-predicate simple-array-long-float-p
86                        (simple-array long-float (*)))
87 (define-type-predicate simple-array-complex-single-float-p
88                        (simple-array (complex single-float) (*)))
89 (define-type-predicate simple-array-complex-double-float-p
90                        (simple-array (complex double-float) (*)))
91 #!+long-float
92 (define-type-predicate simple-array-complex-long-float-p
93                        (simple-array (complex long-float) (*)))
94 (define-type-predicate simple-base-string-p simple-base-string)
95 (define-type-predicate system-area-pointer-p system-area-pointer)
96 (define-type-predicate unsigned-byte-32-p (unsigned-byte 32))
97 (define-type-predicate signed-byte-32-p (signed-byte 32))
98 (define-type-predicate vector-t-p (vector t))
99 (define-type-predicate vector-nil-p (vector nil))
100 (define-type-predicate weak-pointer-p weak-pointer)
101 (define-type-predicate code-component-p code-component)
102 (define-type-predicate lra-p lra)
103 (define-type-predicate fdefn-p fdefn)
104
105 ;;; Unlike the un-%'ed versions, these are true type predicates,
106 ;;; accepting any type object.
107 (define-type-predicate %standard-char-p standard-char)