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