Various minor fixes for compiler/linter (other then splint itself) warnings.
[splint-patched.git] / src / Headers / usymtab.h
blob5df84c37c90bce857a9060667ceefdda232a5359
1 /*
2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
3 ** See ../LICENSE for license information.
4 */
5 /*
6 ** usymtab.h
7 */
9 # ifndef USYMTAB_H
10 # define USYMTAB_H
12 /*@constant null usymtab GLOBAL_ENV; @*/
13 # define GLOBAL_ENV usymtab_undefined
15 typedef enum {
16 US_GLOBAL,
17 US_NORMAL,
18 US_TBRANCH, US_FBRANCH,
19 US_CBRANCH, US_SWITCH
20 } uskind;
22 typedef struct { int level; int index; } *refentry;
23 typedef /*@only@*/ refentry o_refentry;
24 typedef o_refentry *refTable;
26 struct s_usymtab
28 uskind kind;
29 int nentries;
30 int nspace;
31 int lexlevel;
32 bool mustBreak;
33 exitkind exitCode;
34 /*@reldef@*/ /*@only@*/ o_uentry *entries;
35 /*@null@*/ /*@only@*/ cstringTable htable; /* for the global environment */
36 /*@null@*/ /*@only@*/ refTable reftable; /* for branched environments */
37 /*@only@*/ guardSet guards; /* guarded references (not null) */
38 aliasTable aliases;
39 /*@owned@*/ usymtab env;
40 } ;
43 ** rep invariant:
45 ** (left as exercise to reader) ;)
48 extern void usymtab_printTypes (void)
49 /*@globals internalState@*/
50 /*@modifies g_warningstream@*/ ;
52 extern void usymtab_setMustBreak (void) /*@modifies internalState@*/ ;
54 extern bool usymtab_inGlobalScope (void) /*@globals internalState@*/ ;
55 extern bool usymtab_inFunctionScope (void) /*@globals internalState@*/ ;
56 extern bool usymtab_inFileScope (void) /*@globals internalState@*/ ;
57 extern void usymtab_checkFinalScope (bool p_isReturn)
58 /*@globals internalState@*/
59 /*@modifies *g_warningstream@*/ ;
61 extern void usymtab_allUsed (void)
62 /*@globals internalState@*/
63 /*@modifies *g_warningstream@*/ ;
65 extern void usymtab_allDefined (void)
66 /*@globals internalState@*/
67 /*@modifies *g_warningstream@*/ ;
69 extern void usymtab_prepareDump (void)
70 /*@modifies internalState@*/ ;
72 extern void usymtab_dump (FILE *p_fout)
73 /*@globals internalState@*/
74 /*@modifies *p_fout@*/ ;
77 extern void usymtab_load (FILE *p_f) /*@modifies p_f, internalState@*/ ;
79 extern /*@exposed@*/ /*@dependent@*/ uentry
80 usymtab_getRefQuiet (int p_level, usymId p_index)
81 /*@globals internalState@*/ ;
83 extern void usymtab_printLocal (void)
84 /*@globals internalState@*/
85 /*@modifies stdout@*/ ;
87 extern /*@exposed@*/ /*@dependent@*/ uentry usymtab_getParam (int p_paramno)
88 /*@globals internalState@*/;
89 # if 0
90 extern void usymtab_free (void) /*@modifies internalState@*/ ;
91 # endif
92 extern bool usymtab_inDeepScope (void) /*@globals internalState@*/ ;
94 extern /*@exposed@*/ uentry usymtab_lookupExpose (cstring p_k)
95 /*@globals internalState@*/ ;
97 extern /*@observer@*/ uentry usymtab_lookup (cstring p_k)
98 /*@globals internalState@*/ ;
100 # define usymtab_lookup(s) (usymtab_lookupExpose (s))
102 extern /*@observer@*/ uentry usymtab_lookupGlob (cstring p_k)
103 /*@globals internalState@*/ ;
104 extern /*@exposed@*/ uentry usymtab_lookupExposeGlob (cstring p_k)
105 /*@globals internalState@*/ ;
106 extern /*@observer@*/ uentry usymtab_lookupUnionTag (cstring p_k)
107 /*@globals internalState@*/ ;
108 extern /*@observer@*/ uentry usymtab_lookupStructTag (cstring p_k)
109 /*@globals internalState@*/ ;
110 extern /*@observer@*/ uentry usymtab_lookupEither (cstring p_k)
111 /*@globals internalState@*/ ;
113 extern ctype usymtab_lookupType (cstring p_k)
114 /*@globals internalState@*/ ;
116 extern bool usymtab_isDefinitelyNull (sRef p_s)
117 /*@globals internalState@*/ ;
118 extern bool usymtab_isDefinitelyNullDeep (sRef p_s)
119 /*@globals internalState@*/ ;
121 extern usymId usymtab_supExposedTypeEntry (/*@only@*/ uentry p_e, bool p_dodef)
122 /*@modifies internalState, p_e@*/ ;
124 extern ctype usymtab_supTypeEntry (/*@only@*/ uentry p_e)
125 /*@modifies internalState, p_e@*/ ;
127 extern /*@exposed@*/ uentry usymtab_supReturnTypeEntry (/*@only@*/ uentry p_e)
128 /*@modifies internalState@*/ ;
130 extern /*@observer@*/ uentry usymtab_lookupSafe (cstring p_k)
131 /*@globals internalState@*/ ;
133 extern /*@observer@*/ uentry
134 usymtab_lookupSafeScope (cstring p_k, int p_lexlevel)
135 /*@globals internalState@*/ ;
137 extern /*@observer@*/ uentry usymtab_getGlobalEntry (usymId p_uid)
138 /*@globals internalState@*/ ;
140 extern bool usymtab_exists (cstring p_k)
141 /*@globals internalState@*/ ;
143 extern bool usymtab_existsVar (cstring p_k)
144 /*@globals internalState@*/ ;
146 extern bool usymtab_existsGlob (cstring p_k)
147 /*@globals internalState@*/ ;
149 extern bool usymtab_existsType (cstring p_k)
150 /*@globals internalState@*/ ;
152 extern bool usymtab_existsEither (cstring p_k)
153 /*@globals internalState@*/ ;
155 extern bool usymtab_existsTypeEither (cstring p_k)
156 /*@globals internalState@*/ ;
158 extern usymId usymtab_getId (cstring p_k) /*@globals internalState@*/ ;
159 extern typeId usymtab_getTypeId (cstring p_k) /*@globals internalState@*/ ;
161 extern void usymtab_supEntry (/*@only@*/ uentry p_e)
162 /*@modifies internalState, p_e@*/ ;
164 extern void usymtab_replaceEntry (/*@only@*/ uentry p_s)
165 /*@modifies internalState, p_s@*/ ;
167 extern void usymtab_supEntrySref (/*@only@*/ uentry p_e)
168 /*@modifies internalState, p_e@*/ ;
170 extern void usymtab_supGlobalEntry (/*@only@*/ uentry p_e)
171 /*@modifies internalState@*/ ;
173 extern void usymtab_addGlobalEntry (/*@only@*/ uentry p_e)
174 /*@modifies internalState, p_e@*/ ;
176 extern /*@exposed@*/ uentry
177 usymtab_supEntryReturn (/*@only@*/ uentry p_e)
178 /*@modifies internalState, p_e@*/ ;
180 extern usymId usymtab_addEntry (/*@only@*/ uentry p_e)
181 /*@modifies internalState, p_e@*/ ;
183 extern ctype usymtab_lookupAbstractType (cstring p_k)
184 /*@globals internalState@*/ /*@modifies nothing@*/ ;
186 extern bool usymtab_matchForwardStruct (typeId p_u1, typeId p_u2)
187 /*@globals internalState@*/ ;
189 extern bool usymtab_existsEnumTag (cstring p_k)
190 /*@globals internalState@*/ ;
191 extern bool usymtab_existsUnionTag (cstring p_k)
192 /*@globals internalState@*/ ;
193 extern bool usymtab_existsStructTag (cstring p_k)
194 /*@globals internalState@*/ ;
196 /*@iter usymtab_entries (sef usymtab u, yield exposed uentry el); @*/
197 # define usymtab_entries(x, m_i) \
198 { int m_ind; \
199 if (usymtab_isDefined (x)) \
200 for (m_ind = 0; m_ind < (x)->nentries; m_ind++) \
201 { uentry m_i = (x)->entries[m_ind];
203 # define end_usymtab_entries }}
205 extern /*@unused@*/ void usymtab_displayAllUses (void)
206 /*@globals internalState@*/
207 /*@modifies *g_warningstream@*/ ;
209 extern /*@unused@*/ void usymtab_printOut (void)
210 /*@globals internalState@*/
211 /*@modifies *g_warningstream@*/ ;
213 extern /*@unused@*/ void usymtab_printAll (void)
214 /*@globals internalState@*/
215 /*@modifies *g_warningstream@*/ ;
217 extern void usymtab_enterScope (void)
218 /*@modifies internalState;@*/ ;
219 extern void usymtab_enterFunctionScope (uentry p_fcn)
220 /*@modifies internalState;@*/ ;
221 extern void usymtab_quietExitScope (fileloc p_loc)
222 /*@modifies internalState;@*/ ;
223 extern void usymtab_exitScope (exprNode p_expr) /*@modifies internalState@*/ ;
224 extern void usymtab_addGuards (guardSet p_guards) /*@modifies internalState@*/ ;
225 extern void usymtab_setExitCode (exitkind p_ex) /*@modifies internalState@*/ ;
226 extern void usymtab_exitFile (void) /*@modifies internalState@*/ ;
227 extern void usymtab_enterFile (void) /*@modifies internalState@*/ ;
229 extern /*@observer@*/ uentry usymtab_lookupEnumTag (cstring p_k)
230 /*@globals internalState@*/ ;
232 extern usymId usymtab_convertId (usymId p_uid) /*@globals internalState@*/ ;
233 extern typeId usymtab_convertTypeId (typeId p_uid) /*@globals internalState@*/ ;
234 extern void usymtab_initMod (void) /*@modifies internalState@*/ ;
235 extern void usymtab_destroyMod (void) /*@modifies internalState@*/ ;
236 extern void usymtab_initBool (void) /*@modifies internalState@*/ ;
237 extern void usymtab_initGlobalMarker (void) /*@modifies internalState@*/ ;
239 extern void usymtab_exportHeader (void)
240 /*@modifies internalState@*/ ;
242 extern ctype usymtab_structFieldsType (uentryList p_f)
243 /*@globals internalState@*/ ;
245 extern ctype usymtab_unionFieldsType (uentryList p_f)
246 /*@globals internalState@*/ ;
248 extern ctype usymtab_enumEnumNameListType (enumNameList p_f)
249 /*@globals internalState@*/ ;
251 extern /*@exposed@*/ uentry usymtab_getTypeEntrySafe (typeId p_uid)
252 /*@globals internalState@*/ ;
254 extern void usymtab_popOrBranch (exprNode p_pred, exprNode p_expr)
255 /*@modifies internalState@*/ ;
256 extern void usymtab_popAndBranch (exprNode p_pred, exprNode p_expr)
257 /*@modifies internalState@*/ ;
259 extern void usymtab_trueBranch (/*@only@*/ guardSet p_guards)
260 /*@modifies internalState@*/ ;
261 extern void usymtab_altBranch (/*@only@*/ guardSet p_guards)
262 /*@modifies internalState@*/ ;
264 extern void usymtab_popTrueBranch (exprNode p_pred, exprNode p_expr, clause p_cl)
265 /*@modifies internalState@*/ ;
267 extern void
268 usymtab_popTrueExecBranch (exprNode p_pred, exprNode p_expr, clause p_cl)
269 /*@modifies internalState@*/ ;
271 extern void
272 usymtab_popBranches (exprNode p_pred, exprNode p_tbranch, exprNode p_fbranch,
273 bool p_isOpt, clause p_cl)
274 /*@modifies internalState@*/ ;
276 extern void usymtab_unguard (sRef p_s) /*@modifies internalState@*/ ;
277 extern bool usymtab_isGuarded (sRef p_s) /*@globals internalState@*/ ;
278 extern void usymtab_printGuards (void) /*@globals internalState@*/ /*@modifies *g_warningstream@*/ ;
279 extern void usymtab_quietPlainExitScope (void) /*@modifies internalState@*/ ;
280 extern void usymtab_printComplete (void) /*@globals internalState@*/ /*@modifies *stdout@*/ ;
282 extern bool usymtab_existsGlobEither (cstring p_k) /*@globals internalState@*/ ;
284 extern bool usymtab_isBoolType (typeId p_uid) /*@globals internalState@*/ ;
285 extern /*@only@*/ cstring usymtab_getTypeEntryName (typeId p_uid)
286 /*@globals internalState@*/ ;
287 extern /*@exposed@*/ uentry usymtab_getTypeEntry (typeId p_uid)
288 /*@globals internalState@*/ ;
290 extern typeId
291 usymtab_supAbstractTypeEntry (/*@only@*/ uentry p_e, bool p_dodef)
292 /*@modifies internalState, p_e@*/ ;
293 extern ctype usymtab_supForwardTypeEntry (/*@only@*/ uentry p_e)
294 /*@modifies internalState, p_e@*/ ;
296 extern /*@exposed@*/ uentry
297 usymtab_supGlobalEntryReturn (/*@only@*/ uentry p_e)
298 /*@modifies internalState, p_e@*/ ;
300 extern /*@exposed@*/ uentry
301 usymtab_supEntrySrefReturn (/*@only@*/ uentry p_e)
302 /*@modifies internalState, p_e@*/ ;
304 extern usymId usymtab_directParamNo (uentry p_ue)
305 /*@globals internalState@*/ ;
307 extern bool usymtab_newCase (exprNode p_pred, exprNode p_last)
308 /*@modifies internalState@*/ ;
310 extern void usymtab_switchBranch (exprNode p_s)
311 /*@modifies internalState@*/ ;
313 extern /*@only@*/ cstring usymtab_unparseStack (void)
314 /*@globals internalState@*/ ;
315 extern void usymtab_exitSwitch (exprNode p_sw, bool p_allpaths)
316 /*@modifies internalState@*/ ;
318 extern /*@observer@*/ uentry usymtab_lookupGlobSafe (cstring p_k)
319 /*@globals internalState@*/ ;
321 extern /*@only@*/ sRefSet usymtab_aliasedBy (sRef p_s)
322 /*@globals internalState@*/ ;
324 extern /*@only@*/ sRefSet usymtab_canAlias (sRef p_s)
325 /*@globals internalState@*/ ;
327 extern void usymtab_clearAlias (sRef p_s)
328 /*@modifies internalState, p_s@*/ ;
330 extern void usymtab_addMustAlias (/*@exposed@*/ sRef p_s, /*@exposed@*/ sRef p_al)
331 /*@modifies internalState@*/ ;
333 extern void usymtab_addForceMustAlias (/*@exposed@*/ sRef p_s, /*@exposed@*/ sRef p_al)
334 /*@modifies internalState@*/ ;
336 extern /*@only@*/ cstring usymtab_unparseAliases (void)
337 /*@globals internalState@*/ ;
339 extern /*@exposed@*/ uentry
340 usymtab_supReturnFileEntry (/*@only@*/ uentry p_e)
341 /*@modifies internalState@*/ ;
343 extern bool usymtab_isAltDefinitelyNullDeep (sRef p_s)
344 /*@globals internalState@*/ ;
346 extern bool usymtab_existsReal (cstring p_k)
347 /*@globals internalState@*/ ;
349 extern /*@only@*/ sRefSet usymtab_allAliases (sRef p_s)
350 /*@globals internalState@*/ ;
352 extern void usymtab_exportLocal (void)
353 /*@modifies internalState@*/ ;
355 extern void usymtab_popCaseBranch (void)
356 /*@modifies internalState@*/ ;
358 /* special scopes */
360 /*@constant int globScope;@*/
361 # define globScope 0 /* global variables */
363 /*@constant int fileScope;@*/
364 # define fileScope 1 /* file-level static variables */
366 /*@constant int paramsScope;@*/
367 # define paramsScope 2 /* function parameters */
369 /*@constant int functionScope;@*/
370 # define functionScope 3
372 extern /*@falsewhennull@*/ bool usymtab_isDefined (usymtab p_u) /*@*/ ;
374 /*@constant null usymtab usymtab_undefined; @*/
375 # define usymtab_undefined ((usymtab)NULL)
376 # define usymtab_isDefined(u) ((u) != usymtab_undefined)
378 extern void usymtab_checkDistinctName (uentry p_e, int p_scope)
379 /*@globals internalState@*/
380 /*@modifies *g_warningstream, p_e@*/ ;
382 extern /*@exposed@*/ sRef usymtab_lookupGlobalMarker (void) /*@globals internalState@*/ ;
383 # if 0
384 extern int usymtab_getCurrentDepth (void) /*@globals internalState@*/ ;
385 # endif
387 # ifdef DEBUGSPLINT
388 extern void usymtab_checkAllValid (void) /*@modifies g_errorstream@*/ ;
389 # endif
391 # else
392 # error "Multiple include"
393 # endif