2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001.
3 ** See ../LICENSE for license information.
9 ** renamed from ctype.h to avoid confusion with standard
17 ** since this is the header file for the ctype module, we need
18 ** to use an access comment to provide access to the representation.
21 /* in forwardTypes: typedef int ctype; */
36 CT_ENUMLIST, /* bogus type for keeping unnamed enums around */
37 CT_BOOL, /* since booleans aren't really prim's but we don't
38 want them to be user or abst, they are a separate type */
39 CT_CONJ, /* conjunction */
47 /*@constant int CTK_ELIPS;@*/
48 # define CTK_ELIPS -23
50 /*@constant int CTK_MISSINGPARAMS;@*/
51 # define CTK_MISSINGPARAMS -37
53 /*@constant int CT_FIRST;@*/
56 /*@constant int CTK_PREDEFINED;@*/
57 # define CTK_PREDEFINED (CTX_LAST + 1)
59 /*@constant int CTK_PREDEFINED2;@*/
60 # define CTK_PREDEFINED2 (CTK_PREDEFINED + CTK_PREDEFINED)
62 /*@constant int LAST_PREDEFINED;@*/
63 # define LAST_PREDEFINED (CTK_PREDEFINED + CTK_PREDEFINED2)
65 /*@constant int CTP_VOID;@*/
66 # define CTP_VOID (CTX_VOID + CTK_PREDEFINED)
68 /*@constant int CTP_CHAR;@*/
69 # define CTP_CHAR (CTX_CHAR + CTK_PREDEFINED)
71 /*@constant int CTK_BASESIZE;@*/
72 # define CTK_BASESIZE BIGBASESIZE
79 CTK_PLAIN = 0, /* these must be in order */
85 extern int ctkind_toInt (ctkind p_x);
86 # define ctkind_toInt(x) ((int)(x))
89 ** ctypes are integer indexes into ctype table
91 ** the most common ctypes are hard wired (see cprim.h)
94 /*@constant ctype ctype_undefined; @*/
95 # define ctype_undefined ((ctype) CTK_INVALID)
97 /*@constant ctype ctype_dne; @*/
98 # define ctype_dne ((ctype) CTK_DNE)
100 /*@constant ctype ctype_unknown; @*/
101 # define ctype_unknown CTX_UNKNOWN
103 /*@constant ctype ctype_void; @*/
104 # define ctype_void CTX_VOID
106 /*@constant ctype ctype_char; @*/
107 # define ctype_char CTX_CHAR
109 /*@constant ctype ctype_uchar; @*/
110 # define ctype_uchar CTX_UCHAR
112 /*@constant ctype ctype_double; @*/
113 # define ctype_double CTX_DOUBLE
115 /*@constant ctype ctype_ldouble; @*/
116 # define ctype_ldouble CTX_LDOUBLE
118 /*@constant ctype ctype_float; @*/
119 # define ctype_float CTX_FLOAT
121 /*@constant ctype ctype_int; @*/
122 # define ctype_int CTX_INT
124 /*@constant ctype ctype_uint; @*/
125 # define ctype_uint CTX_UINT
127 /*@constant ctype ctype_sint; @*/
128 # define ctype_sint CTX_SINT
130 /*@constant ctype ctype_lint; @*/
131 # define ctype_lint CTX_LINT
133 /*@constant ctype ctype_usint; @*/
134 # define ctype_usint CTX_USINT
136 /*@constant ctype ctype_ulint; @*/
137 # define ctype_ulint CTX_ULINT
139 /*@constant ctype ctype_llint; @*/
140 # define ctype_llint CTX_LLINT
142 /*@constant ctype ctype_ullint; @*/
143 # define ctype_ullint CTX_ULLINT
145 /*@constant ctype ctype_bool; @*/
146 # define ctype_bool CTX_BOOL
148 /*@constant ctype ctype_string; @*/
149 # define ctype_string CTP_CHAR
151 /*@constant ctype ctype_anyintegral @*/
152 # define ctype_anyintegral CTX_ANYINTEGRAL
154 /*@constant ctype ctype_unsignedintegral @*/
155 # define ctype_unsignedintegral CTX_UNSIGNEDINTEGRAL
157 /*@constant ctype ctype_signedintegral @*/
158 # define ctype_signedintegral CTX_SIGNEDINTEGRAL
160 /*@constant ctype ctype_voidPointer; @*/
161 # define ctype_voidPointer CTP_VOID
163 extern ctype ctype_forceRealType (ctype p_c);
164 extern bool ctype_forceMatch (ctype p_c1, ctype p_c2);
165 extern bool ctype_genMatch (ctype p_c1, ctype p_c2, bool p_force, bool p_arg, bool p_def, bool p_deep);
167 extern bool ctype_isSimple (ctype p_c) /*@*/ ;
168 extern bool ctype_isAbstract (ctype p_c) /*@*/ ;
169 extern bool ctype_isArray (ctype p_c) /*@*/ ;
170 extern bool ctype_isFixedArray (ctype p_c) /*@*/ ;
171 extern bool ctype_isIncompleteArray (ctype p_c) /*@*/ ;
172 extern bool ctype_isArrayPtr (ctype p_c) /*@*/ ;
173 extern bool ctype_isBool (ctype p_c) /*@*/ ; /* matches type bool */
174 extern bool ctype_isManifestBool (ctype p_c) /*@*/ ; /* declared as type bool */
175 extern bool ctype_isChar (ctype p_c) /*@*/ ;
176 extern bool ctype_isUnsignedChar (ctype p_c) /*@*/ ;
177 extern bool ctype_isSignedChar (ctype p_c) /*@*/ ;
178 extern bool ctype_isString (ctype p_c) /*@*/ ;
179 extern bool ctype_isConj (ctype p_c) /*@*/ ;
180 extern bool ctype_isDirectBool (ctype p_c) /*@*/ ;
181 extern bool ctype_isDirectInt(ctype p_c) /*@*/ ;
182 extern bool ctype_isEnum(ctype p_c) /*@*/ ;
183 extern bool ctype_isExpFcn (ctype p_c) /*@*/ ;
184 extern bool ctype_isFirstVoid (ctype p_c) /*@*/ ;
185 extern bool ctype_isForceRealBool (ctype *p_c) /*@*/ ;
186 extern bool ctype_isForceRealInt (ctype *p_c) /*@*/ ;
187 extern bool ctype_isForceRealNumeric (ctype *p_c) /*@*/ ;
188 extern bool ctype_isFunction (ctype p_c) /*@*/ ;
189 extern bool ctype_isArbitraryIntegral (ctype p_c) /*@*/ ;
190 extern bool ctype_isUnsignedIntegral (ctype p_c) /*@*/ ;
191 extern bool ctype_isSignedIntegral (ctype p_c) /*@*/ ;
192 extern bool ctype_isInt (ctype p_c) /*@*/ ;
193 extern bool ctype_isRegularInt (ctype p_c) /*@*/ ;
194 extern bool ctype_isMutable (ctype p_t) /*@*/ ;
195 extern bool ctype_isImmutableAbstract (ctype p_t) /*@*/ ;
196 extern bool ctype_isNumeric (ctype p_c) /*@*/ ;
197 extern bool ctype_isPointer (ctype p_c) /*@*/ ;
198 extern bool ctype_isReal (ctype p_c) /*@*/ ;
199 extern /*@unused@*/ bool ctype_isFloat (ctype p_c) /*@*/ ;
200 extern bool ctype_isDouble (ctype p_c) /*@*/ ;
201 extern bool ctype_isSigned (ctype p_c) /*@*/ ;
202 extern bool ctype_isUnsigned (ctype p_c) /*@*/ ;
203 extern bool ctype_isRealAP (ctype p_c) /*@*/ ;
204 extern bool ctype_isRealAbstract(ctype p_c) /*@*/ ;
205 extern bool ctype_isRealArray (ctype p_c) /*@*/ ;
206 extern bool ctype_isRealBool (ctype p_c) /*@*/ ;
207 extern bool ctype_isRealFunction (ctype p_c) /*@*/ ;
208 extern bool ctype_isRealInt (ctype p_c) /*@*/ ;
209 extern bool ctype_isRealNumeric (ctype p_c) /*@*/ ;
210 extern bool ctype_isRealPointer (ctype p_c) /*@*/ ;
211 extern bool ctype_isRealSU (ctype p_c) /*@*/ ;
212 extern bool ctype_isRealVoid (ctype p_c) /*@*/ ;
213 extern bool ctype_isStruct (ctype p_c) /*@*/ ;
214 extern bool ctype_isStructorUnion(ctype p_c) /*@*/ ;
215 extern bool ctype_isUA (ctype p_c) /*@*/ ;
216 extern bool ctype_isUnion (ctype p_c) /*@*/ ;
217 extern bool ctype_isVoid (ctype p_c) /*@*/ ;
218 extern bool ctype_isVoidPointer (ctype p_c) /*@*/ ;
220 extern bool ctype_isVisiblySharable (ctype p_t) /*@*/ ;
221 extern bool ctype_match (ctype p_c1, ctype p_c2) /*@*/ ;
222 extern bool ctype_matchArg (ctype p_c1, ctype p_c2) /*@*/ ;
223 extern bool ctype_sameName (ctype p_c1, ctype p_c2) /*@*/ ;
225 extern /*@only@*/ cstring ctype_dump (ctype p_c) /*@*/ ;
226 extern /*@observer@*/ cstring ctype_enumTag (ctype p_c) /*@*/ ;
227 extern /*@observer@*/ cstring ctype_unparse (ctype p_c) /*@*/ ;
228 extern /*@observer@*/ cstring ctype_unparseDeep (ctype p_c) /*@*/ ;
229 extern /*@unused@*/ /*@observer@*/ cstring ctype_unparseSafe (ctype p_c) /*@*/ ;
231 extern ctkind ctkind_fromInt (int p_i) /*@*/ ;
233 extern bool ctype_matchDef (ctype p_c1, ctype p_c2) /*@*/ ;
234 extern ctype ctype_undump (char **p_c);
235 extern ctype ctype_adjustPointers(int p_np, ctype p_c);
236 extern ctype ctype_baseArrayPtr (ctype p_c) /*@*/ ;
237 extern ctype ctype_combine (ctype p_dominant, ctype p_modifier) ;
239 extern ctype ctype_createAbstract (typeId p_u) /*@*/ ;
241 ctype_createEnum (/*@keep@*/ cstring p_tag, /*@keep@*/ enumNameList p_el);
242 extern ctype ctype_createForwardStruct (/*@only@*/ cstring p_n) /*@*/ ;
243 extern ctype ctype_createForwardUnion (/*@only@*/ cstring p_n) /*@*/ ;
244 extern ctype ctype_createStruct (/*@only@*/ cstring p_n, /*@only@*/ uentryList p_f);
245 extern ctype ctype_createUnion (/*@only@*/ cstring p_n, /*@only@*/ uentryList p_f);
247 extern ctype ctype_createUnnamedStruct (/*@only@*/ uentryList p_f) ;
248 extern ctype ctype_createUnnamedUnion (/*@only@*/ uentryList p_f) ;
249 extern ctype ctype_createUser (typeId p_u) ;
251 extern bool ctype_isUnnamedSU (ctype p_c) /*@*/ ;
252 extern bool ctype_isUser (ctype p_c) /*@*/ ;
253 extern ctype ctype_expectFunction(ctype p_c) ;
255 extern ctype ctype_fixArrayPtr (ctype p_c);
257 extern ctype ctype_getBaseType (ctype p_c) /*@*/ ;
259 extern ctype ctype_makeArray (ctype p_c);
260 extern ctype ctype_makeFixedArray (ctype p_c, long p_size);
261 extern ctype ctype_makeConj (ctype p_c1, ctype p_c2);
262 extern ctype ctype_makeParamsFunction (ctype p_base, /*@only@*/ uentryList p_p);
263 extern ctype ctype_makeFunction (ctype p_base, /*@only@*/ uentryList p_p) /*@*/ ;
264 extern ctype ctype_makeNFParamsFunction (ctype p_base, /*@only@*/ uentryList p_p) /*@*/ ;
265 extern ctype ctype_makePointer (ctype p_c);
266 extern ctype ctype_makeRawFunction (ctype p_base, /*@only@*/ uentryList p_p);
268 extern ctype ctype_newBase (ctype p_c, ctype p_p) /*@*/ ;
269 extern ctype ctype_realType (ctype p_c) /*@*/ ;
270 extern ctype ctype_realishType (ctype p_c) /*@*/ ;
271 extern ctype ctype_removePointers (ctype p_c) /*@*/ ;
272 extern ctype ctype_resolve (ctype p_c) /*@*/ ;
273 extern ctype ctype_resolveNumerics (ctype p_c1, ctype p_c2) /*@*/ ;
274 extern ctype ctype_getReturnType (ctype p_c) /*@*/ ;
276 extern bool ctype_isRefCounted (ctype p_t) /*@*/ ;
277 extern /*@observer@*/ uentryList ctype_argsFunction (ctype p_c) /*@*/ ;
278 extern /*@observer@*/ uentryList ctype_getParams (ctype p_c) /*@*/ ;
279 # define ctype_getParams(c) ctype_argsFunction(c)
281 extern /*@observer@*/ enumNameList ctype_elist (ctype p_c) /*@*/ ;
282 extern /*@observer@*/ uentryList ctype_getFields (ctype p_c) /*@*/ ;
285 ** could do some run-time checks...
288 extern cprim ctype_toCprim (ctype p_c) /*@*/ ;
290 # define ctype_toCprim(c) ((cprim) (c))
293 extern int ctype_compare (ctype p_c1, ctype p_c2) /*@*/ ;
294 extern /*@unused@*/ int ctype_count (void);
296 extern ctype ctype_makeExplicitConj (ctype p_c1, ctype p_c2);
298 extern typeId ctype_typeId (ctype p_c);
300 extern ctype ctype_fromQual (qual p_q);
301 extern bool ctype_isAnyFloat (ctype p_c);
302 extern bool ctype_isStackAllocated (ctype p_c);
304 /*@constant ctype ctype_missingParamsMarker; @*/
305 # define ctype_missingParamsMarker ((ctype)CTK_MISSINGPARAMS)
307 extern bool ctype_isMissingParamsMarker (ctype p_ct) /*@*/ ;
308 # define ctype_isMissingParamsMarker(ct) ((ct) == ctype_missingParamsMarker)
310 extern bool ctype_equal (ctype p_c1, ctype p_c2);
311 # define ctype_equal(c1,c2) ((c1) == (c2))
313 extern bool ctype_almostEqual (ctype p_c1, ctype p_c2);
315 /*@constant ctype ctype_elipsMarker; @*/
316 # define ctype_elipsMarker ((ctype) CTK_ELIPS)
318 extern bool ctype_isElips (ctype p_ct) /*@*/;
319 # define ctype_isElips(ct) ((ct) == ctype_elipsMarker)
321 extern bool ctype_isAP (ctype p_c) /*@*/ ;
322 # define ctype_isAP(c) ctype_isArrayPtr(c)
324 extern bool ctype_isDefined (ctype p_c) /*@*/ ;
325 # define ctype_isDefined(c) ((c) != ctype_undefined)
327 extern bool ctype_isKnown (ctype p_c) /*@*/ ;
328 # define ctype_isKnown(c) ((c) != CTX_UNKNOWN)
330 extern bool ctype_isSU (ctype p_c) /*@*/ ;
331 # define ctype_isSU(c) ctype_isStructorUnion(c)
333 extern bool ctype_isUndefined (ctype p_c) /*@*/ ;
334 # define ctype_isUndefined(c) ((c) == ctype_undefined)
336 extern bool ctype_isUnknown (ctype p_c) /*@*/;
337 # define ctype_isUnknown(c) ((c) == CTX_UNKNOWN)
339 extern bool ctype_isBogus (/*@sef@*/ ctype p_c) /*@*/ ;
340 # define ctype_isBogus(c) (ctype_isUndefined(c) || ctype_isUnknown(c))
343 ctype_unparseDeclaration (ctype p_c, /*@only@*/ cstring p_name);
345 extern bool ctype_sameAltTypes (ctype p_c1, ctype p_c2) /*@*/ ;
347 extern void ctype_dumpTable (FILE *p_f);
348 extern void ctype_loadTable (FILE *p_f);
349 extern void ctype_destroyMod (void);
350 extern void ctype_initTable (void);
351 extern /*@only@*/ cstring ctype_unparseTable (void);
352 extern /*@unused@*/ void ctype_printTable (void);
354 extern ctype ctype_widest (ctype, ctype) /*@*/ ;
359 long int ctype_getArraySize (ctype p_c);
360 /*end drl add functions */
362 /* Should only be used in uentry.c */
363 extern bool ctype_isUserBool (ctype p_ct) /*@*/ ;
366 # error "Multiple include"