]> andersk Git - splint.git/blame - src/Headers/ltoken.h
Added check of user specified post conditions.
[splint.git] / src / Headers / ltoken.h
CommitLineData
885824d3 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 */
18typedef enum {
19 SID_VAR, /* VarId */
20 SID_TYPE, /* TypeId */
21 SID_OP, /* OpId */
22 SID_SORT /* sortId */
23} SimpleIdCode;
24
25struct _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
46typedef /*@only@*/ ltoken o_ltoken;
47
48/*@constant null ltoken ltoken_undefined; @*/
49# define ltoken_undefined ((ltoken)NULL)
50
51extern /*@falsenull@*/ bool ltoken_isValid (ltoken p_tok);
52# define ltoken_isValid(t) ((t) != ltoken_undefined)
53
54extern /*@truenull@*/ bool ltoken_isUndefined (ltoken p_tok);
55# define ltoken_isUndefined(t) ((t) == ltoken_undefined)
56
57extern bool ltoken_isStateDefined (/*@sef@*/ ltoken p_tok) /*@*/ ;
58# define ltoken_isStateDefined(t) \
59 (ltoken_isValid (t) && (t)->defined)
60
61extern 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
65extern ltoken
66 ltoken_createType (unsigned int p_code, SimpleIdCode p_idtype, lsymbol p_text) /*@*/ ;
67
68extern ltoken ltoken_create (unsigned int p_code, lsymbol p_text) /*@*/ ;
69
70extern 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
74extern unsigned int ltoken_getLine (/*@sef@*/ ltoken p_tok);
75# define ltoken_getLine(tok) \
76 (ltoken_isValid (tok) ? (tok)->line : 0)
77
78extern void ltoken_setLine (/*@sef@*/ ltoken p_tok, unsigned int p_line);
79# define ltoken_setLine(tok, ln) \
80 (ltoken_isValid (tok) ? (tok)->line = (ln) : (ln))
81
82extern unsigned int ltoken_getCol (/*@sef@*/ ltoken p_tok);
83# define ltoken_getCol(tok) \
84 (ltoken_isValid (tok) ? (tok)->col : 0)
85
86extern 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
91extern unsigned int ltoken_getCode (/*@sef@*/ ltoken p_tok) /*@*/ ;
92# define ltoken_getCode(tok) \
93 (ltoken_isValid (tok) ? (tok)->code : NOTTOKEN)
94
95extern unsigned int ltoken_getIntField (/*@sef@*/ ltoken p_tok) /*@*/ ;
96# define ltoken_getIntField(tok) \
97 (ltoken_isValid (tok) ? (tok)->intfield : 0)
98
99extern lsymbol ltoken_getText (/*@sef@*/ ltoken p_tok) /*@*/;
100# define ltoken_getText(tok) \
101 (ltoken_isValid (tok) ? (tok)->text : lsymbol_undefined)
102
103extern /*@exposed@*/ char *ltoken_getTextChars (/*@sef@*/ ltoken p_tok) /*@*/ ;
104# define ltoken_getTextChars(tok) \
105 (lsymbol_toCharsSafe (ltoken_getText (tok)))
106
107extern bool ltoken_hasSyn (/*@sef@*/ ltoken p_tok) /*@*/ ;
108# define ltoken_hasSyn(tok) \
109 (ltoken_isValid (tok) ? (tok)->hasSyn : FALSE)
110
111
112extern bool ltoken_wasSyn (/*@sef@*/ ltoken p_tok);
113# define ltoken_wasSyn(tok) \
114 (ltoken_isValid (tok) ? lsymbol_isDefined ((tok)->rawText) : FALSE)
115
116/*@-namechecks@*/
117extern /*@dependent@*/ ltoken ltoken_forall;
118extern /*@dependent@*/ ltoken ltoken_exists;
119extern /*@dependent@*/ ltoken ltoken_true;
120extern /*@dependent@*/ ltoken ltoken_false;
121extern /*@dependent@*/ ltoken ltoken_not;
122extern /*@dependent@*/ ltoken ltoken_and;
123extern /*@dependent@*/ ltoken ltoken_or;
124extern /*@dependent@*/ ltoken ltoken_implies;
125extern /*@dependent@*/ ltoken ltoken_eq;
126extern /*@dependent@*/ ltoken ltoken_neq;
127extern /*@dependent@*/ ltoken ltoken_equals;
128extern /*@dependent@*/ ltoken ltoken_eqsep;
129extern /*@dependent@*/ ltoken ltoken_select;
130extern /*@dependent@*/ ltoken ltoken_open;
131extern /*@dependent@*/ ltoken ltoken_sep;
132extern /*@dependent@*/ ltoken ltoken_close;
133extern /*@dependent@*/ ltoken ltoken_id;
134extern /*@dependent@*/ ltoken ltoken_arrow;
135extern /*@dependent@*/ ltoken ltoken_marker;
136extern /*@dependent@*/ ltoken ltoken_pre;
137extern /*@dependent@*/ ltoken ltoken_post;
138extern /*@dependent@*/ ltoken ltoken_comment;
139extern /*@dependent@*/ ltoken ltoken_compose;
140extern /*@dependent@*/ ltoken ltoken_if;
141extern /*@dependent@*/ ltoken ltoken_any;
142extern /*@dependent@*/ ltoken ltoken_result;
143extern /*@dependent@*/ ltoken ltoken_typename;
144extern /*@dependent@*/ ltoken ltoken_bool;
145extern /*@dependent@*/ ltoken ltoken_farrow;
146extern /*@dependent@*/ ltoken ltoken_lbracked;
147extern /*@dependent@*/ ltoken ltoken_rbracket;
148/*@=namechecks@*/
149
150extern cstring ltoken_unparseCodeName (ltoken p_tok) /*@*/ ;
151
152extern /*@observer@*/ cstring ltoken_unparse (ltoken p_s);
153
154extern 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
157extern void ltoken_setRawText (/*@sef@*/ ltoken p_s, lsymbol p_t);
158# define ltoken_setRawText(s,t) (ltoken_isValid (s) ? (s)->rawText = (t) : (t))
159
160extern void ltoken_setIdType (/*@sef@*/ ltoken p_s, SimpleIdCode p_idtype);
161# define ltoken_setIdType(s,i) (ltoken_isValid (s) ? (s)->idtype = (i) : (i))
162
163extern void ltoken_setText (/*@sef@*/ ltoken p_s, lsymbol p_text);
164# define ltoken_setText(s,t) (ltoken_isValid (s) ? (s)->text = (t) : (t))
165
166extern lsymbol ltoken_getRawText (ltoken) /*@*/ ;
167
168/* defined in abstract.c */
169extern bool ltoken_similar (ltoken p_t1, ltoken p_t2) /*@*/ ;
170
171extern /*@observer@*/ char *ltoken_getRawTextChars (ltoken p_s) /*@*/ ;
172# define ltoken_getRawTextChars(s) \
173 (lsymbol_toCharsSafe (ltoken_getRawText (s)))
174
175extern /*@observer@*/ cstring ltoken_getRawString (ltoken p_s) /*@*/ ;
176# define ltoken_getRawString(s) \
177 (lsymbol_toString (ltoken_getRawText (s)))
178
179extern ltoken ltoken_copy (ltoken) /*@*/ ;
180
181extern /*@observer@*/ cstring ltoken_fileName (/*@sef@*/ ltoken p_s);
182# define ltoken_fileName(s) \
183 (ltoken_isValid(s) ? lsymbol_toString ((s)->fname) : cstring_undefined)
184
185extern void ltoken_setFileName (/*@sef@*/ ltoken p_tok, char *p_fname);
186# define ltoken_setFileName(tok,f) \
187 (ltoken_isValid(tok) ? (tok)->fname = lsymbol_fromChars (f) : (f, lsymbol_undefined))
188
189extern bool ltoken_isChar (ltoken p_tok);
190# define ltoken_isChar(t) \
191 (cstring_length (ltoken_unparse (t)) == 1)
192
193extern 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
197extern void ltoken_free (/*@only@*/ ltoken);
198
199extern ltoken ltoken_createFull (unsigned int p_code, lsymbol p_text,
200 cstring p_file, unsigned int p_line,
201 unsigned int p_col) /*@*/ ;
202
203extern ltoken ltoken_createRaw (unsigned int p_code, lsymbol p_text) /*@*/ ;
204extern cstring ltoken_unparseLoc (ltoken p_t) /*@*/ ;
205
206extern void ltoken_markOwned (/*@owned@*/ ltoken);
207extern bool ltoken_isSingleChar (char) /*@*/ ;
208
209# else
210# error "Multiple include"
211# endif
212
213
214
215
216
This page took 0.07006 seconds and 5 git commands to generate.