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