2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
3 ** See ../LICENSE for license information.
10 # ifndef environmentTable_H
11 # define environmentTable_H
14 typedef struct environmentAt_ {
20 typedef struct rangeAt_ {
29 struct _environmentTable
33 /*@reldef@*/ /*@only@*/ e_sRef * keys;
34 /*@reldef@*/ /*@only@*/ o_sRefSet * values;
35 /*@reldef@*/ /*@only@*/ rangeAt * rangeValues;
40 /* extern rangeAt getEnvironment (key); */
41 /* extern boolean inRange (int, range); */
43 /* extern void setMinium (key, min); */
44 /* extern void setMaximum (key, min); */
47 environmentTable_addExactValue (/*@returned@*/ environmentTable p_s, /*@exposed@*/ sRef p_sr, int p_val);
49 extern /*@unused@*/ /*@truenull@*/ bool environmentTable_isUndefined (environmentTable p_s);
50 extern /*@unused@*/ /*@truenull@*/ bool
51 environmentTable_isEmpty (/*@sef@*/ environmentTable p_s);
52 extern /*@falsenull@*/ bool environmentTable_isDefined (environmentTable p_s);
54 /*@constant null environmentTable environmentTable_undefined; @*/
55 # define environmentTable_undefined ((environmentTable) NULL)
56 # define environmentTable_isDefined(s) ((s) != environmentTable_undefined)
57 # define environmentTable_isUndefined(s) ((s) == environmentTable_undefined)
58 # define environmentTable_isEmpty(s) (environmentTable_size(s) == 0)
60 extern int environmentTable_size (/*@sef@*/ environmentTable p_s);
61 # define environmentTable_size(s) (environmentTable_isDefined (s) ? (s)->nelements : 0)
63 /*@iter environmentTable_elements (sef environmentTable t, yield exposed sRef key, yield exposed sRefSet values); @*/
64 # define environmentTable_elements(t, m_key, m_value) \
65 { if (environmentTable_isDefined (t)) \
66 { int m_ind; sRef *m_keys = &((t)->keys[0]); \
67 sRefSet *m_values = &((t)->values[0]); \
68 for (m_ind = 0 ; m_ind < (t)->nelements; m_ind++) \
69 { sRef m_key = *(m_keys++); sRefSet m_value = *(m_values++);
71 # define end_environmentTable_elements }}}
73 extern environmentTable environmentTable_new (void) /*@*/ ;
75 extern void environmentTable_clearEnvironmentes (environmentTable p_s, sRef p_sr)
76 /*@modifies p_s, p_sr@*/ ;
78 extern /*@only@*/ sRefSet environmentTable_canEnvironment (environmentTable p_s, sRef p_sr) /*@*/ ;
79 extern environmentTable environmentTable_copy (environmentTable p_s) /*@*/ ;
81 extern /*@only@*/ cstring environmentTable_unparse (environmentTable p_s) /*@*/ ;
82 extern void environmentTable_free (/*@only@*/ environmentTable p_s) ;
84 extern environmentTable
85 environmentTable_addMustEnvironment (/*@returned@*/ environmentTable p_s, /*@exposed@*/ sRef p_sr, sRef p_al)
88 extern environmentTable
89 environmentTable_levelUnion (/*@returned@*/ environmentTable p_t1, environmentTable p_t2, int p_level)
92 extern environmentTable
93 environmentTable_levelUnionNew (environmentTable p_t1, environmentTable p_t2, int p_level)
94 /*@modifies nothing*/ ;
96 extern void environmentTable_checkGlobs (environmentTable p_t) /*@modifies g_msgstream@*/ ;
97 extern /*@only@*/ sRefSet environmentTable_environmentedBy (environmentTable p_s, sRef p_sr) /*@*/ ;
98 extern void environmentTable_fixSrefs (environmentTable p_s);
99 extern environmentTable environmentTable_levelUnionSeq (/*@returned@*/ environmentTable p_t1,
100 /*@only@*/ environmentTable p_t2, int p_level);
103 extern environmentTable
104 environmentTable_addRelativeRange (/*@returned@*/ environmentTable p_s,
105 /*@exposed@*/ sRef p_sr);
106 exprNode exprNode_mergeEnvironments (exprNode p_ret, exprNode p_e1, exprNode p_e2);
110 environmentTable_testInRange ( environmentTable p_s, /*@exposed@*/ sRef p_sr, int p_index);
113 /*@constant int environmentTableBASESIZE; @*/
114 # define environmentTableBASESIZE MIDBASESIZE
117 # error "Multiple include"