]>
Commit | Line | Data |
---|---|---|
885824d3 | 1 | /* |
28bf4b0b | 2 | ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001. |
885824d3 | 3 | ** See ../LICENSE for license information. |
4 | ** | |
5 | */ | |
6 | /* | |
7 | ** qtype.h | |
8 | ** | |
9 | ** Qualified types: a type qualifier list, and a ctype. | |
10 | */ | |
11 | ||
12 | # ifndef QTYPEH | |
13 | # define QTYPEH | |
14 | ||
28bf4b0b | 15 | abst_typedef /*@null@*/ struct |
885824d3 | 16 | { |
17 | ctype type; | |
18 | qualList quals; | |
19 | } *qtype; | |
20 | ||
21 | /*@constant null qtype qtype_undefined;@*/ | |
22 | # define qtype_undefined ((qtype) NULL) | |
23 | ||
24 | extern /*@truenull@*/ bool qtype_isUndefined (qtype p_q); | |
25 | # define qtype_isUndefined(q) ((q) == qtype_undefined) | |
26 | ||
27 | extern /*@falsenull@*/ bool qtype_isDefined (qtype p_q); | |
28 | # define qtype_isDefined(q) ((q) != qtype_undefined) | |
29 | ||
30 | extern ctype qtype_getType (/*@sef@*/ qtype p_q); | |
31 | # define qtype_getType(q) \ | |
32 | (qtype_isDefined(q) ? (q)->type : ctype_unknown) | |
33 | ||
34 | extern /*@exposed@*/ qualList qtype_getQuals (/*@sef@*/ qtype p_q); | |
35 | # define qtype_getQuals(q) \ | |
36 | (qtype_isDefined(q) ? (q)->quals : qualList_undefined) | |
37 | ||
38 | extern void qtype_setType (/*@sef@*/ qtype p_q, ctype p_c); | |
39 | # define qtype_setType(q, c) (qtype_isDefined(q) ? (q)->type = (c) : (c)) | |
40 | ||
41 | # ifndef NOLCL | |
42 | extern qtype qtype_addQualList (/*@returned@*/ qtype p_qt, qualList p_ql); | |
43 | extern qtype qtype_mergeImplicitAlt (/*@returned@*/ qtype p_q1, /*@only@*/ qtype p_q2); | |
44 | extern /*@only@*/ qtype qtype_copy (qtype p_q); | |
45 | # endif | |
46 | ||
47 | extern /*@notnull@*/ qtype qtype_create (ctype p_c) /*@*/ ; | |
48 | extern /*@only@*/ qtype qtype_unknown(void) /*@*/ ; | |
49 | extern qtype qtype_addQual (/*@returned@*/ qtype p_qt, qual p_q); | |
50 | extern qtype qtype_combine (/*@returned@*/ qtype p_q1, ctype p_ct); | |
51 | extern qtype qtype_mergeAlt (/*@returned@*/ qtype p_q1, /*@only@*/ qtype p_q2); | |
52 | ||
53 | extern qtype qtype_resolve (/*@returned@*/ qtype p_q); | |
54 | extern void qtype_adjustPointers (int p_n, /*@returned@*/ qtype p_q); | |
55 | extern /*@only@*/ cstring qtype_unparse (qtype p_q) /*@*/ ; | |
56 | extern qtype qtype_newBase (/*@returned@*/ qtype p_q, ctype p_ct); | |
57 | extern qtype qtype_newQbase (/*@returned@*/ qtype p_q1, qtype p_q2); | |
58 | extern void qtype_free (/*@only@*/ qtype p_q); | |
59 | ||
60 | # else | |
61 | # error "Multiple include" | |
62 | # endif |