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