]> andersk Git - splint.git/blob - src/Headers/usymtab.h
EXtensive code clean up. Almost passes LCLint.
[splint.git] / src / Headers / usymtab.h
1 /*
2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3 ** See ../LICENSE for license information.
4 */
5 /*
6 ** usymtab.h
7 */
8
9 # ifndef USYMTAB_H
10 # define USYMTAB_H
11 #include "environmentTable.h"
12
13 /*@constant null usymtab GLOBAL_ENV; @*/ 
14 # define GLOBAL_ENV usymtab_undefined
15
16 typedef enum { 
17   US_GLOBAL, 
18   US_NORMAL, 
19   US_TBRANCH, US_FBRANCH, 
20   US_CBRANCH, US_SWITCH
21 } uskind;
22
23 typedef struct _refentry { int level; int index; } *refentry;
24 typedef /*@only@*/ refentry o_refentry;
25 typedef o_refentry *refTable;
26
27 struct _usymtab
28 {
29   uskind   kind;
30   int      nentries;
31   int      nspace;
32   int      lexlevel;
33   bool     mustBreak;
34   exitkind exitCode;
35   /*@reldef@*/ /*@only@*/ o_uentry  *entries;
36   /*@null@*/ /*@only@*/ hashTable htable;   /* for the global environment */
37   /*@null@*/ /*@only@*/ refTable  reftable; /* for branched environments */
38              /*@only@*/ guardSet  guards;   /* guarded references (not null) */
39   aliasTable aliases;
40   /*@owned@*/ usymtab env;
41   //  environmentTable environment;
42 } ; 
43
44 /*
45 ** rep invariant:
46 **
47 ** (left as exercise to reader)  ;) 
48 */
49
50 extern void usymtab_printTypes (void) 
51   /*@globals internalState@*/
52   /*@modifies g_msgstream@*/ ;
53
54 extern void usymtab_setMustBreak (void) /*@modifies internalState@*/ ;
55
56 extern bool usymtab_inGlobalScope (void) /*@globals internalState@*/ ;
57 extern bool usymtab_inFunctionScope (void) /*@globals internalState@*/ ;
58 extern bool usymtab_inFileScope (void) /*@globals internalState@*/ ;
59 extern void usymtab_checkFinalScope (bool p_isReturn) 
60   /*@globals internalState@*/ 
61   /*@modifies *g_msgstream@*/ ;
62
63 extern void usymtab_allUsed (void)
64    /*@globals internalState@*/ 
65    /*@modifies *g_msgstream@*/ ;
66
67 extern void usymtab_allDefined (void)
68    /*@globals internalState@*/
69    /*@modifies *g_msgstream@*/ ;
70
71 extern void usymtab_prepareDump (void)
72    /*@modifies internalState@*/ ;
73
74 extern void usymtab_dump (FILE *p_fout)
75    /*@globals internalState@*/
76    /*@modifies *p_fout@*/ ;
77
78
79 extern void usymtab_load (FILE *p_f) /*@modifies p_f, internalState@*/ ;
80
81 extern /*@exposed@*/ /*@dependent@*/ uentry 
82   usymtab_getRefQuiet (int p_level, usymId p_index)
83   /*@globals internalState@*/ ;
84
85 extern void usymtab_printLocal (void) 
86   /*@globals internalState@*/ 
87   /*@modifies stdout@*/ ;
88
89 extern /*@exposed@*/ /*@dependent@*/ uentry usymtab_getParam (int p_paramno)
90    /*@globals internalState@*/;
91 extern void usymtab_free (void) /*@modifies internalState@*/ ;
92 extern bool usymtab_inDeepScope (void) /*@globals internalState@*/ ;
93
94 extern /*@exposed@*/  uentry usymtab_lookupExpose (cstring p_k)
95    /*@globals internalState@*/ ;
96 extern /*@observer@*/ uentry usymtab_lookup (cstring p_k)
97    /*@globals internalState@*/ ;
98 # define usymtab_lookup(s) (usymtab_lookupExpose (s))
99
100 extern /*@observer@*/ uentry usymtab_lookupGlob (cstring p_k)
101    /*@globals internalState@*/ ;
102 extern /*@exposed@*/ uentry usymtab_lookupExposeGlob (cstring p_k)
103    /*@globals internalState@*/ ;
104 extern /*@observer@*/ uentry usymtab_lookupUnionTag (cstring p_k)
105    /*@globals internalState@*/ ;
106 extern /*@observer@*/ uentry usymtab_lookupStructTag (cstring p_k)
107    /*@globals internalState@*/ ;
108 extern /*@observer@*/ uentry usymtab_lookupEither (cstring p_k)
109    /*@globals internalState@*/ ;
110
111 # ifndef NOLCL
112 extern ctype usymtab_lookupType (cstring p_k)
113    /*@globals internalState@*/ ;
114 # endif
115
116 extern bool usymtab_isProbableNull (sRef p_s)
117    /*@globals internalState@*/ ;
118 extern bool usymtab_isProbableDeepNull (sRef p_s)
119    /*@globals internalState@*/ ;
120
121 # ifndef NOLCL
122 extern usymId usymtab_supExposedTypeEntry (/*@only@*/ uentry p_e, bool p_dodef)
123    /*@modifies internalState, p_e@*/ ;
124 # endif
125
126 extern ctype usymtab_supTypeEntry (/*@only@*/ uentry p_e)
127    /*@modifies internalState, p_e@*/ ;
128
129 extern /*@exposed@*/ uentry usymtab_supReturnTypeEntry (/*@only@*/ uentry p_e)
130    /*@modifies internalState@*/ ;
131
132 extern /*@observer@*/ uentry usymtab_lookupSafe (cstring p_k)
133    /*@globals internalState@*/ ;
134
135 extern /*@observer@*/ uentry usymtab_getGlobalEntry (usymId p_uid)
136   /*@globals internalState@*/ ;
137
138 extern bool usymtab_exists (cstring p_k)
139    /*@globals internalState@*/ ;
140
141 # ifndef NOLCL
142 extern bool usymtab_existsVar (cstring p_k)
143    /*@globals internalState@*/ ;
144 # endif
145
146 extern bool usymtab_existsGlob (cstring p_k)
147    /*@globals internalState@*/ ;
148
149 extern bool usymtab_existsType (cstring p_k)
150    /*@globals internalState@*/ ;
151
152 # ifndef NOLCL
153 extern bool usymtab_existsEither (cstring p_k)
154    /*@globals internalState@*/ ;
155 # endif
156
157 extern bool usymtab_existsTypeEither (cstring p_k)
158    /*@globals internalState@*/ ;
159
160 extern usymId usymtab_getId (cstring p_k) /*@globals internalState@*/ ;
161 extern usymId usymtab_getTypeId (cstring p_k) /*@globals internalState@*/ ;
162
163 extern void usymtab_supEntry (/*@only@*/ uentry p_e)
164   /*@modifies internalState, p_e@*/ ;
165
166 # ifndef NOLCL
167 extern void usymtab_replaceEntry (/*@only@*/ uentry p_s)
168   /*@modifies internalState, p_s@*/ ;
169 # endif
170
171 extern void usymtab_supEntrySref (/*@only@*/ uentry p_e)
172   /*@modifies internalState, p_e@*/ ;
173
174 extern void usymtab_supGlobalEntry (/*@only@*/ uentry p_e)
175   /*@modifies internalState@*/ ;
176
177 extern void usymtab_addGlobalEntry (/*@only@*/ uentry p_e) 
178   /*@modifies internalState, p_e@*/ ;
179
180 extern /*@exposed@*/ uentry 
181   usymtab_supEntryReturn (/*@only@*/ uentry p_e)
182   /*@modifies internalState, p_e@*/ ;
183
184 extern usymId usymtab_addEntry (/*@only@*/ uentry p_e)
185   /*@modifies internalState, p_e@*/ ;
186
187 extern ctype usymtab_lookupAbstractType (cstring p_k) 
188   /*@globals internalState@*/ ;
189 extern bool usymtab_matchForwardStruct (usymId p_u1, usymId p_u2)
190   /*@globals internalState@*/ ;
191
192 extern bool usymtab_existsEnumTag (cstring p_k)
193   /*@globals internalState@*/ ;
194 extern bool usymtab_existsUnionTag (cstring p_k) 
195   /*@globals internalState@*/ ;
196 extern bool usymtab_existsStructTag (cstring p_k) 
197   /*@globals internalState@*/ ;
198
199 extern usymId usymId_fromInt (int p_i) /*@*/ ;
200 # define usymId_fromInt(i)   ((usymId)(i))
201
202 extern bool usymId_isInvalid (usymId p_u) /*@*/ ;
203 # define usymId_isInvalid(u) ((u) == USYMIDINVALID)
204
205 extern bool usymId_isValid (usymId p_u) /*@*/ ;
206 # define usymId_isValid(u)   ((u) != USYMIDINVALID)
207
208 extern bool typeId_isInvalid (typeId p_u) /*@*/ ;
209 # define typeId_isInvalid(u) ((u) == typeId_invalid)
210
211 extern bool typeId_isValid (typeId p_u) /*@*/ ;
212 # define typeId_isValid(u)   ((u) != typeId_invalid)
213
214 extern bool typeId_equal (typeId p_u1, typeId p_u2) /*@*/ ;
215 # define typeId_equal(u1,u2) ((u1) == (u2))
216
217 extern typeId typeId_fromInt (int p_i);
218 # define typeId_fromInt(i)   ((typeId)(i))
219
220 /*@iter usymtab_entries (sef usymtab u, yield exposed uentry el); @*/
221 # define usymtab_entries(x, m_i)   \
222     { int m_ind; \
223       if (usymtab_isDefined (x)) \
224         for (m_ind = 0; m_ind < (x)->nentries; m_ind++) \
225            { uentry m_i = (x)->entries[m_ind]; 
226
227 # define end_usymtab_entries }}
228
229 extern /*@unused@*/ void usymtab_displayAllUses (void)
230    /*@globals internalState@*/ 
231    /*@modifies *g_msgstream@*/ ;
232
233 extern /*@unused@*/ void usymtab_printOut (void)
234    /*@globals internalState@*/ 
235    /*@modifies *g_msgstream@*/ ;
236
237 extern /*@unused@*/ void usymtab_printAll (void)
238    /*@globals internalState@*/ 
239    /*@modifies *g_msgstream@*/ ;
240
241 extern void usymtab_enterScope (void) 
242   /*@modifies internalState;@*/ ;
243 extern void usymtab_enterFunctionScope (uentry p_fcn) 
244   /*@modifies internalState;@*/ ;
245 extern void usymtab_quietExitScope (fileloc p_loc)
246   /*@modifies internalState;@*/ ;
247 extern void usymtab_exitScope (exprNode p_expr) /*@modifies internalState@*/ ;
248 extern void usymtab_addGuards (guardSet p_guards) /*@modifies internalState@*/ ;
249 extern void usymtab_setExitCode (exitkind p_ex) /*@modifies internalState@*/ ;
250 extern void usymtab_exitFile (void) /*@modifies internalState@*/ ;
251 extern void usymtab_enterFile (void) /*@modifies internalState@*/ ;
252
253 extern /*@observer@*/ uentry usymtab_lookupEnumTag (cstring p_k)
254   /*@globals internalState@*/ ; 
255
256 extern usymId usymtab_convertId (usymId p_uid) /*@globals internalState@*/ ;
257 extern void usymtab_initMod (void) /*@modifies internalState@*/ ;
258 extern void usymtab_initBool (void) /*@modifies internalState@*/ ;
259
260 extern void usymtab_exportHeader (void)
261    /*@modifies internalState@*/ ;
262
263 extern ctype usymtab_structFieldsType (uentryList p_f)
264    /*@globals internalState@*/ ;
265
266 extern ctype usymtab_unionFieldsType (uentryList p_f)
267    /*@globals internalState@*/ ;
268
269 extern ctype usymtab_enumEnumNameListType (enumNameList p_f)
270    /*@globals internalState@*/ ;
271
272 extern /*@exposed@*/ uentry usymtab_getTypeEntrySafe (usymId p_uid)
273    /*@globals internalState@*/ ;
274
275 extern void usymtab_popOrBranch (exprNode p_pred, exprNode p_expr)
276   /*@modifies internalState@*/ ;
277 extern void usymtab_popAndBranch (exprNode p_pred, exprNode p_expr)
278   /*@modifies internalState@*/ ;
279
280 extern void usymtab_trueBranch (/*@only@*/ guardSet p_guards)
281   /*@modifies internalState@*/ ;
282 extern void usymtab_altBranch (/*@only@*/ guardSet p_guards)
283   /*@modifies internalState@*/ ;
284
285 extern void usymtab_popTrueBranch (exprNode p_pred, exprNode p_expr, clause p_cl)
286   /*@modifies internalState@*/ ;
287 extern void
288   usymtab_popTrueExecBranch (exprNode p_pred, exprNode p_expr, clause p_cl)
289   /*@modifies internalState@*/ ;
290
291 extern void 
292   usymtab_popBranches (exprNode p_pred, exprNode p_tbranch, exprNode p_fbranch, 
293                        bool p_isOpt, clause p_cl)
294    /*@modifies internalState@*/ ;
295
296 extern void usymtab_unguard (sRef p_s) /*@modifies internalState@*/ ;
297 extern bool usymtab_isGuarded (sRef p_s) /*@globals internalState@*/ ;
298 extern void usymtab_printGuards (void) /*@globals internalState@*/ /*@modifies *g_msgstream@*/ ;
299 extern void usymtab_quietPlainExitScope (void) /*@modifies internalState@*/ ;
300 extern void usymtab_printComplete (void) /*@globals internalState@*/ /*@modifies *stdout@*/ ;
301
302 # ifndef NOLCL
303 extern bool usymtab_existsGlobEither (cstring p_k) /*@globals internalState@*/ ;
304 # endif
305
306 extern bool usymtab_isBoolType (usymId p_uid) /*@globals internalState@*/ ;
307 extern /*@only@*/ cstring 
308   usymtab_getTypeEntryName (usymId p_uid)
309   /*@globals internalState@*/ ;
310 extern /*@exposed@*/ uentry usymtab_getTypeEntry (usymId p_uid)
311   /*@globals internalState@*/ ;
312
313 extern usymId 
314   usymtab_supAbstractTypeEntry (/*@only@*/ uentry p_e, bool p_dodef)
315   /*@modifies internalState, p_e@*/ ;
316 extern ctype usymtab_supForwardTypeEntry (/*@only@*/ uentry p_e)
317   /*@modifies internalState, p_e@*/ ;
318
319 extern /*@exposed@*/ uentry 
320   usymtab_supGlobalEntryReturn (/*@only@*/ uentry p_e)
321   /*@modifies internalState, p_e@*/ ;
322
323 extern /*@exposed@*/ uentry 
324   usymtab_supEntrySrefReturn (/*@only@*/ uentry p_e)
325   /*@modifies internalState, p_e@*/ ;
326
327 extern int uentry_directParamNo (uentry p_ue)
328   /*@globals internalState@*/ ;
329
330 extern bool usymtab_newCase (exprNode p_pred, exprNode p_last)
331   /*@modifies internalState@*/ ;
332
333 extern void usymtab_switchBranch (exprNode p_s) 
334   /*@modifies internalState@*/ ;
335
336 extern /*@only@*/ cstring usymtab_unparseStack (void)
337   /*@globals internalState@*/ ;
338 extern void usymtab_exitSwitch (exprNode p_sw, bool p_allpaths)
339   /*@modifies internalState@*/ ;
340
341 extern /*@observer@*/ uentry usymtab_lookupGlobSafe (cstring p_k)
342   /*@globals internalState@*/ ;
343
344 extern /*@only@*/ sRefSet usymtab_aliasedBy (sRef p_s)
345   /*@globals internalState@*/ ;
346
347 extern /*@only@*/ sRefSet usymtab_canAlias (sRef p_s)
348   /*@globals internalState@*/ ;
349
350 extern void usymtab_clearAlias (sRef p_s)
351   /*@modifies internalState, p_s@*/ ;
352
353 extern void usymtab_addMustAlias (sRef p_s, sRef p_al)
354   /*@modifies internalState@*/ ;
355
356 extern void usymtab_addForceMustAlias (sRef p_s, sRef p_al)
357   /*@modifies internalState@*/ ;
358
359 extern /*@only@*/ cstring usymtab_unparseAliases (void)
360   /*@globals internalState@*/ ;
361
362 extern /*@exposed@*/ uentry
363   usymtab_supReturnFileEntry (/*@only@*/ uentry p_e)
364    /*@modifies internalState@*/ ;
365
366 extern bool usymtab_isAltProbablyDeepNull (sRef p_s)
367    /*@globals internalState@*/ ;
368
369 extern bool usymtab_existsReal (cstring p_k)
370    /*@globals internalState@*/ ;
371
372 extern /*@only@*/ sRefSet usymtab_allAliases (sRef p_s)
373    /*@globals internalState@*/ ;
374
375 extern void usymtab_exportLocal (void)
376    /*@modifies internalState@*/ ;
377
378 extern void usymtab_popCaseBranch (void)
379      /*@modifies internalState@*/ ;
380
381 /* special scopes */
382
383 /*@constant int globScope;@*/
384 # define globScope 0  /* global variables */
385
386 /*@constant int fileScope;@*/
387 # define fileScope   1  /* file-level static variables */
388
389 /*@constant int paramsScope;@*/
390 # define paramsScope 2  /* function parameters */
391
392 /*@constant int functionScope;@*/
393 # define functionScope 3
394
395 extern /*@falsenull@*/ bool usymtab_isDefined (usymtab p_u) /*@*/ ;
396
397 /*@constant null usymtab usymtab_undefined; @*/
398 # define usymtab_undefined ((usymtab)NULL)
399 # define usymtab_isDefined(u) ((u) != usymtab_undefined)
400
401 extern void usymtab_checkDistinctName (uentry p_e, int p_scope)
402   /*@globals internalState@*/
403   /*@modifies *g_msgstream, p_e@*/ ;
404
405
406   /*DRL add 9/4/00 */
407   //extern void usymtab_testInRange (sRef p_s, int p_index)  /*@modifies internalState;@*/;
408   //extern void usymtab_postopVar (sRef p_sr) /*@modifies internalState;@*/ ;
409
410
411 # else
412 # error "Multiple include"
413 # endif
414
415
416
This page took 0.074736 seconds and 5 git commands to generate.