]> andersk Git - splint.git/blob - src/Headers/uentry.h
Initial revision
[splint.git] / src / Headers / uentry.h
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
This page took 0.080331 seconds and 5 git commands to generate.