]>
Commit | Line | Data |
---|---|---|
885824d3 | 1 | /* |
2 | ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000. | |
3 | ** See ../LICENSE for license information. | |
4 | */ | |
5 | # ifndef UENTRY_H | |
6 | # define UENTRY_H | |
7 | # define CENTRY_H | |
8 | ||
9 | /* | |
10 | ** universal symbol table entry | |
11 | ** (combines old llentry, centry, and ttentry) | |
12 | */ | |
13 | ||
14 | /* | |
15 | ** vkind --- need to fix value for consistency in dump files | |
16 | */ | |
17 | ||
18 | typedef struct _ucinfo | |
19 | { | |
20 | /*@only@*/ multiVal val; | |
21 | typeIdSet access; | |
22 | } *ucinfo; | |
23 | ||
24 | typedef enum | |
25 | { | |
26 | VKSPEC = 0, VKNORMAL, | |
27 | VKPARAM, VKYIELDPARAM, VKREFYIELDPARAM, | |
28 | VKRETPARAM, VKREFPARAM, | |
29 | VKSEFPARAM, VKREFSEFPARAM, | |
30 | VKSEFRETPARAM, VKREFSEFRETPARAM, | |
31 | VKEXPMACRO | |
32 | } vkind; | |
33 | ||
34 | /*@constant vkind VKFIRST;@*/ | |
35 | # define VKFIRST VKSPEC | |
36 | ||
37 | /*@constant vkind VKLAST;@*/ | |
38 | # define VKLAST VKEXPMACRO | |
39 | ||
40 | typedef enum | |
41 | { | |
42 | CH_UNKNOWN, | |
43 | CH_UNCHECKED, | |
44 | CH_CHECKED, | |
45 | CH_CHECKMOD, | |
46 | CH_CHECKEDSTRICT | |
47 | } chkind; | |
48 | ||
49 | typedef struct _uvinfo | |
50 | { | |
51 | vkind kind; /* kind (parameter, specified) */ | |
52 | chkind checked; /* how is it checked */ | |
53 | sstate defstate; | |
54 | nstate nullstate; | |
55 | } *uvinfo ; | |
56 | ||
57 | typedef struct _udinfo | |
58 | { | |
59 | ynm abs; | |
60 | ynm mut; | |
61 | ctype type; | |
62 | } *udinfo ; | |
63 | ||
64 | /* information for specified functions */ | |
65 | ||
66 | typedef enum | |
67 | { | |
68 | SPC_NONE, | |
69 | SPC_PRINTFLIKE, | |
70 | SPC_SCANFLIKE, | |
71 | SPC_MESSAGELIKE, | |
72 | SPC_LAST | |
73 | } specCode; | |
74 | ||
75 | typedef struct _ufinfo | |
76 | { | |
77 | qual nullPred; | |
78 | specCode specialCode; | |
79 | exitkind exitCode; | |
80 | typeIdSet access; /* access types */ | |
81 | ||
82 | /*@owned@*/ globSet globs; /* globals list */ | |
83 | /*@owned@*/ sRefSet mods; /* modifies */ | |
84 | ||
85 | specialClauses specclauses; | |
86 | ||
87 | /*@dependent@*/ uentryList defparams; | |
88 | bool hasGlobs BOOLBITS; | |
89 | bool hasMods BOOLBITS; | |
90 | } *ufinfo ; | |
91 | ||
92 | typedef struct _uiinfo | |
93 | { | |
94 | typeIdSet access; | |
95 | /*@owned@*/ globSet globs; /* globals list */ | |
96 | /*@owned@*/ sRefSet mods; /* modifies */ | |
97 | } *uiinfo ; | |
98 | ||
99 | typedef struct _ueinfo | |
100 | { | |
101 | typeIdSet access; | |
102 | } *ueinfo ; | |
103 | ||
104 | typedef union _uinfo | |
105 | { | |
106 | ucinfo uconst; | |
107 | uvinfo var; | |
108 | udinfo datatype; | |
109 | ufinfo fcn; | |
110 | uiinfo iter; | |
111 | ueinfo enditer; | |
112 | } *uinfo ; | |
113 | ||
114 | struct _uentry | |
115 | { | |
116 | ekind ukind; | |
117 | cstring uname; | |
118 | ctype utype; | |
119 | ||
120 | fileloc whereSpecified; | |
121 | fileloc whereDefined; | |
122 | fileloc whereDeclared; | |
123 | ||
124 | /* meaning of sref is different for: | |
125 | ** variables current state | |
126 | ** functions state of return value | |
127 | ** types state of datatype | |
128 | */ | |
129 | /*@exposed@*/ /*@null@*/ sRef sref; | |
130 | ||
131 | /* Location list is complete only if showalluses is set. */ | |
132 | filelocList uses; | |
133 | ||
134 | bool used BOOLBITS; | |
135 | bool lset BOOLBITS; /* set in local table */ | |
136 | bool isPrivate BOOLBITS; /* specification only */ | |
137 | bool hasNameError BOOLBITS; | |
138 | ||
139 | storageClassCode storageclass; | |
140 | /*@relnull@*/ uinfo info; /* null for KELIPSMARKER, KINVALID */ | |
141 | } ; | |
142 | ||
143 | /* | |
144 | ** There is no uentry_isDefined to avoid confusion with | |
145 | ** uentry_isCodeDefined (which was previously called | |
146 | ** uentry_isDefined. | |
147 | */ | |
148 | ||
149 | extern /*@truenull@*/ bool uentry_isUndefined (/*@special@*/ uentry p_e) | |
150 | /*@*/ ; | |
151 | extern /*@truenull@*/ bool uentry_isInvalid (/*@special@*/ uentry p_e) | |
152 | /*@*/ ; | |
153 | extern /*@falsenull@*/ bool uentry_isValid (/*@special@*/ uentry p_e) | |
154 | /*@*/ ; | |
155 | ||
156 | /*@constant null uentry uentry_undefined; @*/ | |
157 | # define uentry_undefined ((uentry) NULL) | |
158 | ||
159 | # define uentry_isUndefined(e) ((e) == uentry_undefined) | |
160 | # define uentry_isValid(e) ((e) != uentry_undefined) | |
161 | # define uentry_isInvalid(e) ((e) == uentry_undefined) | |
162 | ||
163 | extern int uentry_compareStrict (uentry p_v1, uentry p_v2); | |
164 | ||
165 | /*@constant int PARAMUNKNOWN; @*/ | |
166 | # define PARAMUNKNOWN -1 | |
167 | ||
168 | extern bool uentry_isMaybeAbstract (uentry p_e) /*@*/ ; | |
169 | extern void uentry_setAbstract (uentry p_e) /*@modifies p_e@*/ ; | |
170 | extern void uentry_setConcrete (uentry p_e) /*@modifies p_e@*/ ; | |
171 | extern void uentry_setHasNameError (uentry p_ue) /*@modifies p_ue@*/ ; | |
172 | ||
173 | extern /*@falsenull@*/ bool uentry_isLset (/*@sef@*/ uentry p_e); | |
174 | # define uentry_isLset(e) \ | |
175 | (uentry_isValid(e) && (e)->lset) | |
176 | ||
177 | extern /*@falsenull@*/ bool uentry_isUsed (/*@sef@*/ uentry p_e); | |
178 | # define uentry_isUsed(e) (uentry_isValid(e) && (e)->used) | |
179 | ||
180 | extern /*@unused@*/ /*@falsenull@*/ bool | |
181 | uentry_isAbstractType (uentry p_e) /*@*/ ; | |
182 | # define uentry_isAbstractType(e) (uentry_isAbstractDatatype(e)) | |
183 | ||
184 | extern /*@falsenull@*/ bool uentry_isConstant (/*@sef@*/ uentry p_e) /*@*/ ; | |
185 | # define uentry_isConstant(e) \ | |
186 | (uentry_isValid(e) && ekind_isConst ((e)->ukind)) | |
187 | ||
188 | extern /*@falsenull@*/ bool uentry_isEitherConstant (/*@sef@*/ uentry p_e) /*@*/ ; | |
189 | # define uentry_isEitherConstant(e) \ | |
190 | (uentry_isValid(e) && (ekind_isConst ((e)->ukind) || ekind_isEnumConst ((e)->ukind))) | |
191 | ||
192 | extern /*@falsenull@*/ bool uentry_isEnumConstant (/*@sef@*/ uentry p_e) /*@*/ ; | |
193 | # define uentry_isEnumConstant(e) \ | |
194 | (uentry_isValid(e) && ekind_isEnumConst ((e)->ukind)) | |
195 | ||
196 | extern /*@falsenull@*/ bool uentry_isExternal (/*@sef@*/ uentry p_e) /*@*/ ; | |
197 | # define uentry_isExternal(c) \ | |
198 | (uentry_isValid(c) && fileloc_isExternal (uentry_whereDefined (c))) | |
199 | ||
200 | extern /*@falsenull@*/ bool uentry_isExtern (/*@sef@*/ uentry p_e) /*@*/ ; | |
201 | # define uentry_isExtern(c) \ | |
202 | (uentry_isValid(c) && (c)->storageclass == SCEXTERN) | |
203 | ||
204 | extern bool uentry_isForward (uentry p_e) /*@*/ ; | |
205 | ||
206 | extern /*@falsenull@*/ bool uentry_isFunction (/*@sef@*/ uentry p_e) /*@*/ ; | |
207 | # define uentry_isFunction(e) \ | |
208 | (uentry_isValid(e) && ekind_isFunction ((e)->ukind)) | |
209 | ||
210 | extern /*@falsenull@*/ bool uentry_isPriv (/*@sef@*/ uentry p_e) /*@*/ ; | |
211 | # define uentry_isPriv(e) \ | |
212 | (uentry_isValid(e) && (e)->isPrivate) | |
213 | ||
214 | extern /*@falsenull@*/ bool uentry_isFileStatic (uentry p_ue) /*@*/ ; | |
215 | extern /*@falsenull@*/ bool uentry_isExported (uentry p_ue) /*@*/ ; | |
216 | ||
217 | extern /*@falsenull@*/ bool uentry_isStatic (/*@sef@*/ uentry p_e) /*@*/ ; | |
218 | # define uentry_isStatic(c) \ | |
219 | (uentry_isValid(c) && (c)->storageclass == SCSTATIC) | |
220 | ||
221 | extern void uentry_setLset (/*@sef@*/ uentry p_e); | |
222 | # define uentry_setLset(e) \ | |
223 | (uentry_isValid(e) ? (e)->lset = TRUE : TRUE) | |
224 | ||
225 | extern bool uentry_isSpecialFunction (uentry p_ue) /*@*/ ; | |
226 | extern bool uentry_isMessageLike (uentry p_ue) /*@*/ ; | |
227 | extern bool uentry_isScanfLike (uentry p_ue) /*@*/ ; | |
228 | extern bool uentry_isPrintfLike (uentry p_ue) /*@*/ ; | |
229 | ||
230 | extern void uentry_setMessageLike (uentry p_ue) /*@modifies p_ue@*/ ; | |
231 | extern void uentry_setScanfLike (uentry p_ue) /*@modifies p_ue@*/ ; | |
232 | extern void uentry_setPrintfLike (uentry p_ue) /*@modifies p_ue@*/ ; | |
233 | ||
234 | extern void uentry_checkName (uentry p_ue) /*@modifies g_msgstream, p_ue@*/ ; | |
235 | ||
236 | extern bool uentry_sameObject (uentry p_e1, uentry p_e2); | |
237 | # define uentry_sameObject(e1,e2) ((e1) == (e2)) | |
238 | ||
239 | extern void uentry_addAccessType (uentry p_ue, typeId p_tid) /*@modifies p_ue@*/ ; | |
240 | ||
241 | extern void uentry_showWhereAny (uentry p_spec) | |
242 | /*@modifies g_msgstream@*/ ; | |
243 | ||
244 | extern void uentry_checkParams (uentry p_ue); | |
245 | extern void uentry_mergeUses (uentry p_res, uentry p_other); | |
246 | extern void uentry_setExtern (uentry p_c); | |
247 | extern void uentry_setUsed (uentry p_e, fileloc p_loc); | |
248 | extern void uentry_setDefState (uentry p_ue, sstate p_defstate); | |
249 | ||
250 | extern void uentry_setNotUsed (/*@sef@*/ uentry p_e); | |
251 | # define uentry_setNotUsed(e) \ | |
252 | (uentry_isValid (e) ? (e)->used = FALSE : FALSE) | |
253 | ||
254 | extern bool uentry_wasUsed (/*@sef@*/ uentry p_e); | |
255 | # define uentry_wasUsed(e) \ | |
256 | (uentry_isValid (e) ? (e)->used : TRUE) | |
257 | ||
258 | extern void uentry_mergeConstantValue (uentry p_ue, /*@only@*/ multiVal p_m); | |
259 | ||
260 | extern /*@observer@*/ fileloc uentry_whereEarliest (uentry p_e) /*@*/ ; | |
261 | extern /*@observer@*/ cstring uentry_rawName (uentry p_e) /*@*/ ; | |
262 | extern /*@observer@*/ fileloc uentry_whereDeclared (uentry p_e) /*@*/ ; | |
263 | extern bool uentry_equiv (uentry p_p1, uentry p_p2) /*@*/ ; | |
264 | extern /*@falsenull@*/ bool uentry_hasName (uentry p_e) /*@*/ ; | |
265 | extern /*@falsenull@*/ bool uentry_hasRealName (uentry p_e) /*@*/ ; | |
266 | extern /*@falsenull@*/ bool uentry_isAbstractDatatype (uentry p_e) /*@*/ ; | |
267 | extern /*@falsenull@*/ bool uentry_isAnyTag (/*@special@*/ uentry p_ue) | |
268 | /*@uses p_ue->ukind@*/ | |
269 | /*@*/ ; | |
270 | extern /*@falsenull@*/ bool uentry_isDatatype (uentry p_e) /*@*/ ; | |
271 | ||
272 | extern /*@falsenull@*/ bool uentry_isCodeDefined (uentry p_e) /*@*/ ; | |
273 | ||
274 | extern /*@falsenull@*/ bool uentry_isDeclared (/*@special@*/ uentry p_e) | |
275 | /*@uses p_e->whereDeclared@*/ /*@*/ ; | |
276 | ||
277 | extern /*@observer@*/ cstring uentry_ekindName (uentry p_ue) /*@*/ ; | |
278 | extern void uentry_showWhereDefined (uentry p_spec); | |
279 | extern /*@falsenull@*/ bool uentry_isEndIter (uentry p_e) /*@*/ ; | |
280 | extern /*@falsenull@*/ bool uentry_isEnumTag (/*@special@*/ uentry p_ue) | |
281 | /*@uses p_ue->ukind@*/ /*@*/ ; | |
282 | extern /*@falsenull@*/ bool uentry_isFakeTag (uentry p_e) /*@*/ ; | |
283 | extern /*@falsenull@*/ bool uentry_isIter (uentry p_e) /*@*/ ; | |
284 | extern /*@falsenull@*/ bool uentry_isMutableDatatype (uentry p_e) /*@*/ ; | |
285 | extern /*@falsenull@*/ bool uentry_isParam (uentry p_u) /*@*/ ; | |
286 | extern /*@falsenull@*/ bool uentry_isExpandedMacro (uentry p_u) /*@*/ ; | |
287 | extern /*@falsenull@*/ bool uentry_isSefParam (uentry p_u) /*@*/ ; | |
288 | extern /*@falsenull@*/ bool uentry_isAnyParam (/*@special@*/ uentry p_u) | |
289 | /*@uses p_u->ukind, p_u->info@*/ | |
290 | /*@*/ ; | |
291 | ||
292 | extern /*@falsenull@*/ bool uentry_isRealFunction (uentry p_e) /*@*/ ; | |
293 | extern /*@falsenull@*/ bool uentry_isSpecified (uentry p_e) /*@*/ ; | |
294 | ||
295 | extern /*@falsenull@*/ bool uentry_isStructTag (/*@special@*/ uentry p_ue) | |
296 | /*@uses p_ue->ukind@*/ /*@*/ ; | |
297 | extern /*@falsenull@*/ bool uentry_isUnionTag (/*@special@*/ uentry p_ue) | |
298 | /*@uses p_ue->ukind@*/ /*@*/ ; | |
299 | ||
300 | extern /*@falsenull@*/ bool uentry_isVar (/*@special@*/ uentry p_e) | |
301 | /*@uses p_e->ukind@*/ | |
302 | /*@*/ ; | |
303 | ||
304 | extern /*@falsenull@*/ bool uentry_isVariable (/*@special@*/ uentry p_e) | |
305 | /*@uses p_e->ukind@*/ | |
306 | /*@*/ ; | |
307 | ||
308 | extern cstring uentry_dump (uentry p_v) ; | |
309 | extern cstring uentry_dumpParam (uentry p_v); | |
310 | extern cstring uentry_getName (/*@special@*/ uentry p_e) | |
311 | /*@uses p_e->ukind, p_e->info, p_e->uname@*/ | |
312 | /*@*/ ; | |
313 | ||
314 | extern cstring uentry_unparse (uentry p_v) /*@*/ ; | |
315 | extern cstring uentry_unparseAbbrev (uentry p_v) /*@*/ ; | |
316 | extern cstring uentry_unparseFull (uentry p_v) /*@*/ ; | |
317 | extern void uentry_setMutable (uentry p_e) /*@modifies p_e@*/ ; | |
318 | extern ctype uentry_getAbstractType (uentry p_e) /*@*/ ; | |
319 | extern ctype uentry_getRealType (uentry p_e) /*@globals internalState@*/ ; | |
320 | extern ctype uentry_getType (uentry p_e) /*@*/ ; | |
321 | extern ekind uentry_getKind (uentry p_e) /*@*/ ; | |
322 | extern /*@observer@*/ fileloc uentry_whereDefined (uentry p_e) /*@*/ ; | |
323 | extern /*@observer@*/ fileloc uentry_whereSpecified (uentry p_e) /*@*/ ; | |
324 | extern int uentry_compare (uentry p_u1, uentry p_u2); | |
325 | extern /*@exposed@*/ sRef uentry_getSref (/*@temp@*/ uentry p_e) /*@*/ ; | |
326 | extern /*@observer@*/ sRefSet uentry_getMods (uentry p_l) /*@*/ ; | |
327 | extern typeIdSet uentry_accessType (uentry p_e) /*@*/ ; | |
328 | extern /*@observer@*/ fileloc uentry_whereEither (uentry p_e) /*@*/ ; | |
329 | extern /*@notnull@*/ uentry uentry_makeExpandedMacro (cstring p_s, | |
330 | /*@temp@*/ fileloc p_f) | |
331 | /*@*/ ; | |
332 | ||
333 | extern void uentry_checkMatchParam (uentry p_u1, uentry p_u2, int p_paramno, exprNode p_e) /*@modifies g_msgstream@*/ ; | |
334 | ||
335 | extern /*@observer@*/ specialClauses uentry_getSpecialClauses (uentry p_ue) /*@*/ ; | |
336 | ||
337 | extern void uentry_showWhereLastExtra (uentry p_spec, /*@only@*/ cstring p_extra) | |
338 | /*@modifies g_msgstream@*/ ; | |
339 | ||
340 | # ifndef NOLCL | |
341 | extern void uentry_setRefCounted (uentry p_e); | |
342 | ||
343 | extern /*@notnull@*/ /*@only@*/ uentry uentry_makeUnnamedVariable (ctype p_t); | |
344 | ||
345 | extern /*@notnull@*/ uentry | |
346 | uentry_makeUnspecFunction (cstring p_n, ctype p_t, typeIdSet p_access, | |
347 | /*@keep@*/ fileloc p_f); | |
348 | ||
349 | extern /*@notnull@*/ uentry | |
350 | uentry_makePrivFunction2 (cstring p_n, ctype p_t, | |
351 | typeIdSet p_access, | |
352 | /*@only@*/ globSet p_globs, | |
353 | /*@only@*/ sRefSet p_mods, /*@keep@*/ fileloc p_f); | |
354 | ||
355 | extern /*@notnull@*/ uentry | |
356 | uentry_makeSpecEnumConstant (cstring p_n, ctype p_t, /*@keep@*/ fileloc p_loc) /*@*/ ; | |
357 | ||
358 | extern /*@notnull@*/ uentry | |
359 | uentry_makeEnumTag (cstring p_n, ctype p_t, /*@only@*/ fileloc p_loc) /*@*/ ; | |
360 | ||
361 | extern /*@notnull@*/ uentry | |
362 | uentry_makeTypeListFunction (cstring p_n, typeIdSet p_access, /*@only@*/ fileloc p_f) | |
363 | /*@*/ ; | |
364 | ||
365 | extern /*@notnull@*/ uentry | |
366 | uentry_makeSpecFunction (cstring p_n, ctype p_t, | |
367 | typeIdSet p_access, /*@only@*/ globSet p_globs, | |
368 | /*@only@*/ sRefSet p_mods, /*@keep@*/ fileloc p_f); | |
369 | # endif | |
370 | ||
371 | extern /*@notnull@*/ uentry | |
372 | uentry_makeEnumConstant (cstring p_n, ctype p_t) /*@*/ ; | |
373 | ||
374 | extern /*@notnull@*/ uentry | |
375 | uentry_makeEnumInitializedConstant (cstring p_n, ctype p_t, exprNode p_expr) /*@*/ ; | |
376 | ||
377 | extern /*@notnull@*/ /*@only@*/ uentry | |
378 | uentry_makeConstant (/*@temp@*/ cstring p_n, ctype p_t, /*@keep@*/ fileloc p_f) | |
379 | /*@*/ ; | |
380 | extern /*@notnull@*/ /*@only@*/ uentry | |
381 | uentry_makeConstantAux (/*@temp@*/ cstring p_n, ctype p_t, | |
382 | /*@keep@*/ fileloc p_f, bool p_priv, | |
383 | /*@only@*/ multiVal p_m) /*@*/ ; | |
384 | extern /*@notnull@*/ /*@only@*/ uentry | |
385 | uentry_makeDatatype (/*@temp@*/ cstring p_n, ctype p_t, ynm p_mut, ynm p_abs, | |
386 | /*@only@*/ fileloc p_f) /*@*/ ; | |
387 | extern /*@notnull@*/ /*@only@*/ uentry | |
388 | uentry_makeDatatypeAux (/*@temp@*/ cstring p_n, ctype p_t, ynm p_mut, | |
389 | ynm p_abs, /*@keep@*/ fileloc p_f, bool p_priv) /*@*/ ; | |
390 | extern /*@notnull@*/ uentry uentry_makeElipsisMarker (void) /*@*/ ; | |
391 | ||
392 | extern void uentry_makeVarFunction (/*@temp@*/ uentry p_ue) /*@modifies p_ue@*/ ; | |
393 | ||
394 | extern bool uentry_isElipsisMarker (/*@sef@*/ uentry p_u) /*@*/ ; | |
395 | # define uentry_isElipsisMarker(u) \ | |
396 | (uentry_isValid(u) && ekind_isElipsis ((u)->ukind)) | |
397 | ||
398 | extern /*@notnull@*/ uentry | |
399 | uentry_makeEndIter (cstring p_n, /*@only@*/ fileloc p_f) /*@*/ ; | |
400 | extern /*@notnull@*/ uentry | |
401 | uentry_makeEnumTagLoc (cstring p_n, ctype p_t) /*@*/ ; | |
402 | extern /*@notnull@*/ uentry | |
403 | uentry_makeForwardFunction (cstring p_n, typeId p_access, /*@temp@*/ fileloc p_f) /*@*/ ; | |
404 | ||
405 | extern /*@notnull@*/ uentry | |
406 | uentry_makeFunction (cstring p_n, ctype p_t, | |
407 | typeId p_access, | |
408 | /*@only@*/ globSet p_globs, /*@only@*/ sRefSet p_mods, | |
409 | /*@only@*/ fileloc p_f); | |
410 | ||
411 | extern /*@notnull@*/ uentry | |
412 | uentry_makeIter (cstring p_n, ctype p_ct, /*@only@*/ fileloc p_f) /*@*/ ; | |
413 | extern /*@notnull@*/ uentry | |
414 | uentry_makeParam (idDecl p_t, int p_i) /*@*/ ; | |
415 | ||
416 | extern /*@notnull@*/ uentry | |
417 | uentry_makeStructTag (cstring p_n, ctype p_t, /*@only@*/ fileloc p_loc); | |
418 | extern /*@notnull@*/ uentry | |
419 | uentry_makeStructTagLoc (cstring p_n, ctype p_t); | |
420 | extern /*@notnull@*/ uentry | |
421 | uentry_makeUnionTag (cstring p_n, ctype p_t, /*@only@*/ fileloc p_loc); | |
422 | extern /*@notnull@*/ uentry | |
423 | uentry_makeUnionTagLoc (cstring p_n, ctype p_t); | |
424 | extern /*@notnull@*/ uentry | |
425 | uentry_makeVariable (cstring p_n, ctype p_t, /*@keep@*/ fileloc p_f, bool p_isPriv); | |
426 | extern /*@notnull@*/ /*@only@*/ uentry | |
427 | uentry_makeVariableLoc (cstring p_n, ctype p_t); | |
428 | ||
429 | # ifndef NOLCL | |
430 | extern /*@notnull@*/ /*@only@*/ | |
431 | uentry uentry_makeVariableParam (cstring p_n, ctype p_t); | |
432 | # endif | |
433 | ||
434 | extern /*@notnull@*/ /*@only@*/ | |
435 | uentry uentry_makeVariableSrefParam (cstring p_n, ctype p_t, | |
436 | sRef p_s); | |
437 | extern /*@notnull@*/ /*@only@*/ | |
438 | uentry uentry_makeIdFunction (idDecl p_id); | |
439 | extern /*@notnull@*/ /*@only@*/ | |
440 | uentry uentry_makeIdDatatype (idDecl p_id); | |
441 | extern /*@notnull@*/ /*@only@*/ | |
442 | uentry uentry_makeBoolDatatype (ynm p_abs); | |
443 | extern void uentry_mergeDefinition (uentry p_old, /*@only@*/ uentry p_unew); | |
444 | extern void uentry_mergeEntries (uentry p_spec, /*@only@*/ uentry p_def); | |
445 | extern uentry uentry_nameCopy (/*@only@*/ cstring p_name, uentry p_e); | |
446 | extern uentry uentry_undump (ekind p_kind, fileloc p_loc, char **p_s); | |
447 | extern /*@observer@*/ uentryList uentry_getParams (uentry p_l) /*@*/ ; | |
448 | extern void uentry_resetParams (uentry p_ue, /*@only@*/ uentryList p_pn) | |
449 | /*@modifies p_ue@*/ ; | |
450 | extern /*@observer@*/ globSet uentry_getGlobs (uentry p_l) /*@*/ ; | |
451 | extern qual uentry_nullPred (uentry p_u); | |
452 | extern void uentry_free (/*@only@*/ /*@only@*/ uentry p_e); | |
453 | extern void uentry_setDatatype (uentry p_e, usymId p_uid); | |
454 | ||
455 | extern void uentry_setDefined (/*@special@*/ uentry p_e, fileloc p_f) | |
456 | /*@uses p_e->whereDefined, p_e->ukind, p_e->uname, p_e->info@*/ | |
457 | /*@modifies p_e@*/ ; | |
458 | ||
459 | extern void uentry_checkDecl (void); | |
460 | extern void uentry_clearDecl (void); | |
461 | extern void uentry_setDeclared (uentry p_e, fileloc p_f); | |
462 | extern void uentry_setDeclaredOnly (uentry p_e, /*@only@*/ fileloc p_f); | |
463 | extern void uentry_setDeclaredForceOnly (uentry p_e, /*@only@*/ fileloc p_f); | |
464 | extern void uentry_setFunctionDefined (uentry p_e, fileloc p_loc); | |
465 | extern void uentry_setName (uentry p_e, /*@only@*/ cstring p_n); | |
466 | extern void uentry_setParam (uentry p_e); | |
467 | extern void uentry_setSref (uentry p_e, /*@exposed@*/ sRef p_s); | |
468 | extern void uentry_setStatic (uentry p_c); | |
469 | ||
470 | extern void uentry_setModifies (uentry p_ue, /*@owned@*/ sRefSet p_sr) | |
471 | /*@modifies p_ue, p_sr@*/; | |
472 | ||
473 | extern void uentry_setSpecialClauses (uentry p_ue, /*@only@*/ specialClauses p_clauses) | |
474 | /*@modifies p_ue@*/ ; | |
475 | ||
476 | extern void uentry_setType (uentry p_e, ctype p_t); | |
477 | ||
478 | extern /*@unused@*/ /*@observer@*/ cstring uentry_checkedName (uentry p_ue); | |
479 | extern void uentry_showWhereLastPlain (uentry p_spec) /*@modifies g_msgstream@*/ ; | |
480 | ||
481 | extern void | |
482 | uentry_showWhereSpecifiedExtra (uentry p_spec, /*@only@*/ cstring p_s) | |
483 | /*@modifies g_msgstream@*/ ; | |
484 | ||
485 | extern void uentry_showWhereSpecified (uentry p_spec) /*@modifies g_msgstream@*/ ; | |
486 | extern void uentry_showWhereLast (uentry p_spec) /*@modifies g_msgstream@*/ ; | |
487 | extern void uentry_showWhereDeclared (uentry p_spec) /*@modifies g_msgstream@*/ ; | |
488 | ||
489 | extern /*@notnull@*/ /*@only@*/ uentry uentry_makeIdVariable (idDecl p_t) /*@*/ ; | |
490 | extern uentry uentry_copy (uentry p_e) /*@*/ ; | |
491 | extern void uentry_freeComplete (/*@only@*/ uentry p_e) ; | |
492 | extern void uentry_clearDefined (uentry p_e) /*@modifies p_e@*/; | |
493 | extern /*@observer@*/ cstring uentry_specDeclName (uentry p_u) /*@*/ ; | |
494 | ||
495 | extern void | |
496 | uentry_mergeState (uentry p_res, uentry p_other, fileloc p_loc, | |
497 | bool p_mustReturn, bool p_flip, bool p_opt, | |
498 | clause p_cl) /*@modifies p_res, p_other@*/ ; | |
499 | ||
500 | extern void uentry_setState (uentry p_res, uentry p_other) | |
501 | /*@modifies p_res, p_other@*/ ; | |
502 | ||
503 | extern void uentry_setRefParam (uentry p_e) /*@modifies p_e@*/ ; | |
504 | ||
505 | extern void uentry_setDeclaredForce (uentry p_e, fileloc p_f) /*@modifies p_e@*/; | |
506 | extern bool uentry_isNonLocal (uentry p_ue) /*@*/ ; | |
507 | extern bool uentry_isGlobal (uentry p_ue) /*@*/; | |
508 | extern bool uentry_isRefParam (uentry p_u) /*@*/ ; | |
509 | extern bool uentry_hasGlobs (uentry p_ue) /*@*/ ; | |
510 | extern bool uentry_hasMods (uentry p_ue) /*@*/ ; | |
511 | ||
512 | extern bool uentry_hasSpecialClauses (uentry p_ue) /*@*/ ; | |
513 | extern exitkind uentry_getExitCode (uentry p_ue) /*@*/ ; | |
514 | ||
515 | extern void uentry_checkYieldParam (uentry p_old, uentry p_unew); | |
516 | extern bool uentry_isOnly (uentry p_ue) /*@*/ ; | |
517 | extern bool uentry_isUnique (uentry p_ue) /*@*/ ; | |
518 | extern void uentry_reflectQualifiers (uentry p_ue, qualList p_q) /*@modifies p_ue@*/; | |
519 | extern bool uentry_isOut (uentry p_u) /*@*/ ; | |
520 | extern bool uentry_isPartial (uentry p_u) /*@*/ ; | |
521 | extern bool uentry_isStateSpecial (uentry p_u) /*@*/ ; | |
522 | extern bool uentry_possiblyNull (uentry p_u) /*@*/ ; | |
523 | extern ctype uentry_getForceRealType (uentry p_e) /*@globals internalState@*/ ; | |
524 | extern alkind uentry_getAliasKind (uentry p_u) /*@*/ ; | |
525 | extern exkind uentry_getExpKind (uentry p_u) /*@*/ ; | |
526 | extern /*@observer@*/ multiVal uentry_getConstantValue (uentry p_e) /*@*/ ; | |
527 | extern void uentry_fixupSref (uentry p_ue) /*@modifies p_ue@*/ ; | |
528 | extern void uentry_setGlobals (uentry p_ue, /*@owned@*/ globSet p_globs) /*@modifies p_ue@*/ ; | |
529 | extern bool uentry_isYield (uentry p_ue) /*@*/ ; | |
530 | extern /*@notnull@*/ uentry uentry_makeIdConstant (idDecl p_t) /*@*/ ; | |
531 | extern /*@observer@*/ cstring uentry_getRealName (uentry p_e) /*@*/ ; | |
532 | extern int uentry_xcomparealpha (uentry *p_p1, uentry *p_p2) /*@*/ ; | |
533 | extern int uentry_xcompareuses (uentry *p_p1, uentry *p_p2) /*@*/ ; | |
534 | extern /*@observer@*/ cstring uentry_specOrDefName (uentry p_u) /*@*/ ; | |
535 | extern void uentry_copyState (uentry p_res, uentry p_other); | |
536 | extern bool uentry_sameKind (uentry p_u1, uentry p_u2); | |
537 | extern /*@exposed@*/ sRef uentry_returnedRef (uentry p_u, exprNodeList p_args); | |
538 | extern bool uentry_isReturned (uentry p_u); | |
539 | extern bool uentry_isRefCountedDatatype (uentry p_e); | |
540 | extern sstate uentry_getDefState (uentry p_u); | |
541 | extern /*@unused@*/ void uentry_markFree (/*@owned@*/ uentry p_u); | |
542 | extern /*@dependent@*/ sRef uentry_getOrigSref (uentry p_e); | |
543 | extern void uentry_destroyMod (void) /*@modifies internalState@*/; | |
544 | extern void uentry_showDefSpecInfo (uentry p_ce, fileloc p_fwhere); | |
545 | extern void uentry_markOwned (/*@owned@*/ uentry p_u); | |
546 | ||
547 | extern /*@observer@*/ fileloc uentry_whereLast (uentry p_e) /*@*/ ; | |
548 | extern void uentry_setParamNo (uentry p_ue, int p_pno) /*@modifies p_ue@*/; | |
549 | ||
550 | extern /*@observer@*/ filelocList uentry_getUses (/*@sef@*/ uentry p_e) /*@*/ ; | |
551 | # define uentry_getUses(u) (uentry_isValid (u) ? (u)->uses : filelocList_undefined) | |
552 | ||
553 | extern bool uentry_isCheckedUnknown (uentry p_ue) /*@*/ ; | |
554 | extern bool uentry_isCheckedModify (uentry p_ue) /*@*/ ; | |
555 | extern bool uentry_isUnchecked (uentry p_ue) /*@*/ ; | |
556 | extern bool uentry_isChecked (uentry p_ue) /*@*/ ; | |
557 | extern bool uentry_isCheckMod (uentry p_ue) /*@*/ ; | |
558 | extern bool uentry_isCheckedStrict (uentry p_ue) /*@*/ ; | |
559 | extern void uentry_setUnchecked (uentry p_ue) /*@modifies p_ue@*/ ; | |
560 | extern void uentry_setChecked (uentry p_ue) /*@modifies p_ue@*/ ; | |
561 | extern void uentry_setCheckMod (uentry p_ue) /*@modifies p_ue@*/ ; | |
562 | extern void uentry_setCheckedStrict (uentry p_ue) /*@modifies p_ue@*/ ; | |
563 | ||
564 | extern bool uentry_hasAccessType (uentry p_e); | |
565 | ||
566 | extern /*@exposed@*/ uentry uentry_makeUnrecognized (cstring p_c, /*@keep@*/ fileloc p_loc); | |
567 | ||
568 | # ifdef DOANNOTS | |
569 | typedef enum { AN_UNKNOWN, AN_FCNRETURN, AN_FCNPARAM, AN_SUFIELD, AN_TDEFN, AN_GSVAR, | |
570 | AN_CONST, AN_LAST | |
571 | } ancontext; | |
572 | ||
573 | extern void initAnnots (); | |
574 | extern void printAnnots (void); | |
575 | extern void uentry_tallyAnnots (uentry u, ancontext kind); | |
576 | # endif /* DOANNOTS */ | |
577 | ||
578 | # else | |
579 | # error "Multiple include" | |
580 | # endif | |
581 | ||
582 | ||
583 |