]> andersk Git - splint.git/blob - src/Headers/ltoken.h
Committing after merging Evan's changes.
[splint.git] / src / Headers / ltoken.h
1 /*
2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
3 ** See ../LICENSE for license information.
4 **
5 */
6 /*
7 ** ltoken.h
8 */
9
10 # ifndef LTOKEN_H
11 # define LTOKEN_H
12
13 /* SimpleId codes */
14 typedef enum {
15   SID_VAR,          /* VarId */
16   SID_TYPE,         /* TypeId */
17   SID_OP,           /* OpId */
18   SID_SORT          /* sortId */ 
19 } SimpleIdCode;
20
21 struct s_ltoken {
22   ltokenCode code;                              
23   int col;                      
24   int line;                     
25   
26   /* if idtype is SID_SORT, then text field keeps the sort */
27   lsymbol text;                 /* string handle    */
28   lsymbol fname;                        /* source handle    */
29   lsymbol rawText;                      /* original text    */
30   bool defined: 1;                      /* token predefined */
31   bool hasSyn: 1;                       /* synonym exists   */
32   
33   /* just for simpleId: for distinguish simpleId into varId, fcnId, TypeId, ... */
34   /*@reldef@*/ SimpleIdCode idtype; 
35   
36   /* quick and dirty: just for ctypes */
37   /*@reldef@*/ unsigned int intfield; 
38 } ;
39
40 typedef /*@only@*/ ltoken o_ltoken;
41
42 /*@constant null ltoken ltoken_undefined; @*/
43 # define ltoken_undefined  ((ltoken)NULL)
44
45 extern /*@falsewhennull@*/ bool ltoken_isValid (ltoken p_tok);
46 # define ltoken_isValid(t) ((t) != ltoken_undefined)
47
48 extern /*@nullwhentrue@*/ bool ltoken_isUndefined (ltoken p_tok);
49 # define ltoken_isUndefined(t) ((t) == ltoken_undefined)
50
51 extern bool ltoken_isStateDefined (/*@sef@*/ ltoken p_tok) /*@*/ ;
52 # define ltoken_isStateDefined(t) \
53   (ltoken_isValid (t) && (t)->defined) 
54
55 extern void ltoken_setDefined (/*@sef@*/ ltoken p_tok, bool p_def);
56 # define ltoken_setDefined(t, def) \
57   (ltoken_isValid (t) ? (t)->defined = (def) : (def))
58
59 extern ltoken 
60   ltoken_createType (ltokenCode p_code, SimpleIdCode p_idtype, lsymbol p_text) /*@*/ ;
61
62 extern ltoken ltoken_create (ltokenCode p_code, lsymbol p_text) /*@*/ ;
63
64 extern void ltoken_setIntField (/*@sef@*/ ltoken p_tok, unsigned int p_i);
65 # define ltoken_setIntField(tok,i) \
66   (ltoken_isValid (tok) ? (tok)->intfield = (i) : (i))
67      
68 extern int ltoken_getLine (/*@sef@*/ ltoken p_tok);
69 # define ltoken_getLine(tok) \
70   (ltoken_isValid (tok) ? (tok)->line : 0)
71
72 extern void ltoken_setLine (/*@sef@*/ ltoken p_tok, /*@sef@*/ int p_line);
73 # define ltoken_setLine(tok, ln) \
74   (ltoken_isValid (tok) ? (tok)->line = (ln) : 0)
75
76 extern int ltoken_getCol (/*@sef@*/ ltoken p_tok);
77 # define ltoken_getCol(tok) \
78   (ltoken_isValid (tok) ? (tok)->col : 0)
79
80 extern void ltoken_setCol (/*@sef@*/ ltoken p_tok, int p_col)
81    /*@modifies p_tok@*/ ;
82 # define ltoken_setCol(tok, c) \
83   (ltoken_isValid (tok) ? (tok)->col = (c) : (c))
84
85 extern ltokenCode ltoken_getCode (/*@sef@*/ ltoken p_tok) /*@*/ ;
86 # define ltoken_getCode(tok) \
87   (ltoken_isValid (tok) ? (tok)->code : NOTTOKEN)
88
89 extern unsigned int ltoken_getIntField (/*@sef@*/ ltoken p_tok) /*@*/ ;
90 # define ltoken_getIntField(tok) \
91   (ltoken_isValid (tok) ? (tok)->intfield : 0)
92
93 extern lsymbol ltoken_getText (/*@sef@*/ ltoken p_tok) /*@*/;
94 # define ltoken_getText(tok) \
95   (ltoken_isValid (tok) ? (tok)->text : lsymbol_undefined)
96
97 extern /*@exposed@*/ char *ltoken_getTextChars (/*@sef@*/ ltoken p_tok) /*@*/ ;
98 # define ltoken_getTextChars(tok) \
99   (lsymbol_toCharsSafe (ltoken_getText (tok)))
100
101 extern bool ltoken_hasSyn (/*@sef@*/ ltoken p_tok) /*@*/ ;
102 # define ltoken_hasSyn(tok) \
103   (ltoken_isValid (tok) ? (tok)->hasSyn : FALSE)
104
105
106 extern bool ltoken_wasSyn (/*@sef@*/ ltoken p_tok);
107 # define ltoken_wasSyn(tok) \
108   (ltoken_isValid (tok) ? lsymbol_isDefined ((tok)->rawText) : FALSE)
109
110 /*@-namechecks@*/ /* all of these should start with g_ */
111 extern /*@dependent@*/ ltoken ltoken_forall;
112 extern /*@dependent@*/ ltoken ltoken_exists;
113 extern /*@dependent@*/ ltoken ltoken_true;
114 extern /*@dependent@*/ ltoken ltoken_false;
115 extern /*@dependent@*/ ltoken ltoken_not;
116 extern /*@dependent@*/ ltoken ltoken_and;
117 extern /*@dependent@*/ ltoken ltoken_or;
118 extern /*@dependent@*/ ltoken ltoken_implies;
119 extern /*@dependent@*/ ltoken ltoken_eq;
120 extern /*@dependent@*/ ltoken ltoken_neq;
121 extern /*@dependent@*/ ltoken ltoken_equals;
122 extern /*@dependent@*/ ltoken ltoken_eqsep;
123 extern /*@dependent@*/ ltoken ltoken_select;
124 extern /*@dependent@*/ ltoken ltoken_open;
125 extern /*@dependent@*/ ltoken ltoken_sep;
126 extern /*@dependent@*/ ltoken ltoken_close;
127 extern /*@dependent@*/ ltoken ltoken_id;
128 extern /*@dependent@*/ ltoken ltoken_arrow;
129 extern /*@dependent@*/ ltoken ltoken_marker;
130 extern /*@dependent@*/ ltoken ltoken_pre;
131 extern /*@dependent@*/ ltoken ltoken_post;
132 extern /*@dependent@*/ ltoken ltoken_comment;
133 extern /*@dependent@*/ ltoken ltoken_compose; 
134 extern /*@dependent@*/ ltoken ltoken_if;
135 extern /*@dependent@*/ ltoken ltoken_any;
136 extern /*@dependent@*/ ltoken ltoken_result;
137 extern /*@dependent@*/ ltoken ltoken_typename;
138 extern /*@dependent@*/ ltoken ltoken_bool;
139 extern /*@dependent@*/ ltoken ltoken_farrow;
140 extern /*@dependent@*/ ltoken ltoken_lbracked;
141 extern /*@dependent@*/ ltoken ltoken_rbracket;
142 /*@=namechecks@*/
143
144 extern cstring ltoken_unparseCodeName (ltoken p_tok) /*@*/ ;
145
146 extern /*@observer@*/ cstring ltoken_unparse (ltoken p_s);
147
148 extern void ltoken_setCode (/*@sef@*/ ltoken p_s, ltokenCode p_code);
149 # define ltoken_setCode(s,c) (ltoken_isValid (s) ? (s)->code = (c) : (c))
150
151 extern void ltoken_setRawText (/*@sef@*/ ltoken p_s, lsymbol p_t);
152 # define ltoken_setRawText(s,t) (ltoken_isValid (s) ? (s)->rawText = (t) : (t))
153
154 extern void ltoken_setIdType (/*@sef@*/ ltoken p_s, SimpleIdCode p_idtype);
155 # define ltoken_setIdType(s,i) (ltoken_isValid (s) ? (s)->idtype = (i) : (i))
156
157 extern void ltoken_setText (/*@sef@*/ ltoken p_s, lsymbol p_text);
158 # define ltoken_setText(s,t) (ltoken_isValid (s) ? (s)->text = (t) : (t))
159
160 extern lsymbol ltoken_getRawText (ltoken) /*@*/ ;   
161
162 /* defined in abstract.c */
163 extern bool ltoken_similar (ltoken p_t1, ltoken p_t2) /*@*/ ;
164
165 extern /*@observer@*/ char *ltoken_getRawTextChars (ltoken p_s) /*@*/ ;  
166 # define ltoken_getRawTextChars(s) \
167   (lsymbol_toCharsSafe (ltoken_getRawText (s)))
168
169 extern /*@observer@*/ cstring ltoken_getRawString (ltoken p_s) /*@*/ ;
170 # define ltoken_getRawString(s) \
171   (lsymbol_toString (ltoken_getRawText (s)))
172
173 extern ltoken ltoken_copy (ltoken) /*@*/ ;
174
175 extern /*@observer@*/ cstring ltoken_fileName (/*@sef@*/ ltoken p_s);
176 # define ltoken_fileName(s) \
177   (ltoken_isValid(s) ? lsymbol_toString ((s)->fname) : cstring_undefined)
178
179 extern void ltoken_setFileName (/*@sef@*/ ltoken p_tok, /*@sef@*/ cstring p_fname);
180 # define ltoken_setFileName(tok,f) \
181   (ltoken_isValid(tok) ? (tok)->fname = lsymbol_fromString (f) : lsymbol_undefined)
182
183 extern bool ltoken_isChar (ltoken p_tok);
184 # define ltoken_isChar(t) \
185   (cstring_length (ltoken_unparse (t)) == 1)
186
187 extern void ltoken_setHasSyn (/*@sef@*/ ltoken p_tok, bool p_def);
188 # define ltoken_setHasSyn(tok, def) \
189   (ltoken_isValid(tok) ? (tok)->hasSyn = (def) : (def))
190
191 extern void ltoken_free (/*@only@*/ ltoken);
192
193 extern ltoken ltoken_createFull (ltokenCode p_code, lsymbol p_text, 
194                                  cstring p_file, int p_line, int p_col) /*@*/ ;
195
196 extern ltoken ltoken_createRaw (ltokenCode p_code, lsymbol p_text) /*@*/ ;
197 extern cstring ltoken_unparseLoc (ltoken p_t) /*@*/ ;
198
199 extern void ltoken_markOwned (/*@owned@*/ ltoken);
200 extern bool ltoken_isSingleChar (char) /*@*/ ;
201
202 # else
203 # error "Multiple include"
204 # endif
205
206
207
208
209
This page took 0.192472 seconds and 5 git commands to generate.