2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001.
3 ** See ../LICENSE for license information.
10 extern bool /*@alt void@*/ check (bool p_x);
11 # define check(p_x) doCheck (p_x, cstring_fromChars (#p_x), cstring_makeLiteralTemp (__FILE__), __LINE__)
13 extern bool doCheck (bool p_x, cstring p_pred, cstring p_file, int p_line);
15 extern /*@falseexit@*/ void llassert (/*@sef@*/ bool p_test);
17 # define llassert(tst) \
19 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
20 lldiagmsg (message ("%s:%d: at source point", \
21 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
22 llbuglit ("llassert failed: " #tst); \
26 extern /*@falseexit@*/ void llassertretnull (/*@sef@*/ bool p_test);
27 # define llassertretnull(tst) \
29 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
30 lldiagmsg (message ("%s:%d: at source point", \
31 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
32 llbuglit ("llassert failed: " #tst); \
37 ** Use this for assertions in error-generation code (that
38 ** might lead to infinite loops of failed assertions if
39 ** the normal error generation routines are used).
42 extern /*@falseexit@*/ void llassertprotect (/*@sef@*/ bool p_test);
43 # define llassertprotect(tst) \
45 fprintf (stderr, "%s:%d: at source point: ", __FILE__, __LINE__); \
46 fprintf (stderr, "protected fatal llassert failed: " #tst "\n"); \
47 llexit (EXIT_FAILURE); \
50 extern /*@falseexit@*/ void llassertfatal (/*@sef@*/ bool p_test);
51 # define llassertfatal(tst) \
53 llfatalbug (message("%s:%d: fatal llassert failed: " #tst, \
54 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
58 ** llassertprint and llassertprintret are in lclintMacros.nf
61 extern void llmsg (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
63 extern void lldiagmsg (/*@only@*/ cstring p_s) /*@modifies stderr@*/ ;
64 extern void llmsgplain (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
65 extern void llhint (/*@only@*/ cstring p_s)
66 /*@globals g_currentloc, g_msgstream;@*/
67 /*@modifies g_msgstream@*/ ;
69 extern /*@private@*/ /*@exits@*/ void xllfatalbug (char *p_srcFile, int p_srcLine,
70 /*@only@*/ cstring p_s)
71 /*@globals g_currentloc@*/
72 /*@modifies stderr@*/ ;
74 extern /*@exits@*/ void llfatalbug (/*@only@*/ cstring p_s)
75 /*@globals g_currentloc@*/
76 /*@modifies stderr@*/ ;
77 # define llfatalbug(p_s) \
78 xllfatalbug (__FILE__, __LINE__, p_s)
80 extern /*@private@*/ void xllgloberror (char *p_srcFile, int p_srcLine,
81 /*@only@*/ cstring p_s)
82 /*@modifies g_msgstream@*/ ;
84 extern void llgloberror (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
85 # define llgloberror(p_s) \
86 xllgloberror (__FILE__, __LINE__, p_s)
88 extern /*@private@*/ bool xllgenerror (char *p_srcFile, int p_srcLine, flagcode p_o,
89 /*@only@*/ cstring p_s, fileloc p_fl)
90 /*@modifies g_msgstream@*/ ;
92 extern bool llgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_fl)
93 /*@modifies g_msgstream@*/ ;
94 # define llgenerror(p_o, p_s, p_fl) \
95 xllgenerror (__FILE__, __LINE__, p_o, p_s, p_fl)
97 extern /*@private@*/ bool
98 xllgenhinterror (char *p_srcFile, int p_srcLine,
99 flagcode p_o, /*@only@*/ cstring p_s, /*@only@*/ cstring p_hint,
101 /*@modifies g_msgstream@*/ ;
103 extern bool llgenhinterror (flagcode p_o, /*@only@*/ cstring p_s, /*@only@*/ cstring p_hint,
104 fileloc p_fl) /*@modifies g_msgstream@*/ ;
106 # define llgenhinterror(p_o, p_s, p_hint, p_fl) \
107 xllgenhinterror (__FILE__, __LINE__, p_o, p_s, p_hint, p_fl)
110 extern void llerror (flagcode p_o, /*@only@*/ cstring p_s)
111 /*@globals g_msgstream, g_currentloc@*/
112 /*@modifies g_msgstream@*/ ;
113 # define llerror(p_o, p_s) \
114 ((void) llgenerror (p_o, p_s, g_currentloc))
116 extern void llgenmsg (/*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
117 extern /*@exits@*/ void llfatalerror (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
118 extern /*@exits@*/ void llfatalerrorLoc (/*@only@*/ cstring p_s)
119 /*@globals g_currentloc@*/
120 /*@modifies stderr@*/ ;
121 extern void llparseerror (/*@only@*/ cstring p_s)
122 /*@globals g_msgstream, g_currentloc@*/
123 /*@modifies g_msgstream@*/ ;
126 extern /*@exits@*/ void lclplainfatalerror (/*@only@*/ cstring p_msg) /*@modifies g_msgstream@*/ ;
127 extern /*@exits@*/ void lclfatalbug (/*@temp@*/ char *p_msg) /*@modifies g_msgstream@*/ ;
128 extern int lclNumberErrors (void) /*@*/ ;
129 extern bool lclHadNewError (void) /*@modifies internalState@*/ ;
130 extern /*@exits@*/ void lclfatalerror (ltoken p_t, /*@only@*/ cstring p_msg);
132 extern void xlclerror (char *p_srcFile, int p_srcLine, ltoken p_t, /*@only@*/ cstring p_msg) ;
134 extern void lclerror (ltoken p_t, /*@only@*/ cstring p_msg);
135 # define lclerror(p_t,p_msg) \
136 xlclerror (__FILE__, __LINE__, p_t, p_msg)
138 extern void lclbug (/*@only@*/ cstring p_s);
139 extern void lclplainerror (/*@only@*/ cstring p_msg);
140 extern bool lclHadError (void);
141 extern void lclRedeclarationError (ltoken p_id);
144 extern void flagWarning (/*@observer@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
146 extern /*@exits@*/ void llbugaux (cstring p_file, int p_line, /*@only@*/ cstring p_s)
147 /*@globals g_msgstream, g_currentloc@*/
148 /*@modifies *g_msgstream@*/ ;
150 extern /*@exits@*/ void llbug (/*@only@*/ cstring p_s)
151 /*@globals g_msgstream, g_currentloc@*/
152 /*@modifies *g_msgstream@*/ ;
154 /* doesn't really exit, but don't mind errors if it doesn't */
155 # define llbug(s) llbugaux (cstring_makeLiteralTemp (__FILE__), __LINE__, s)
157 extern void llquietbugaux (/*@only@*/ cstring p_s, cstring, int) /*@modifies *g_msgstream@*/ ;
158 extern void llquietbug (/*@only@*/ cstring) /*@modifies *g_msgstream@*/ ;
159 # define llquietbug(s) llquietbugaux (s, cstring_makeLiteralTemp (__FILE__), __LINE__)
161 extern void llcontbug (/*@only@*/ cstring p_s) /*@modifies *g_msgstream@*/ ;
162 /* doesn't really exit, but don't mind errors if it doesn't */
163 # define llcontbug(s) (llbug (s))
165 extern void cleanupMessages (void)
166 /*@globals g_msgstream, g_currentloc;@*/
167 /*@modifies g_msgstream, internalState@*/ ;
170 ** Report error iff f1 and f2 are set.
174 xoptgenerror2 (char *p_srcFile, int p_srcLine,
175 flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
176 /*@modifies *g_msgstream, internalState@*/ ;
179 optgenerror2 (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
180 /*@modifies *g_msgstream, internalState@*/ ;
181 # define optgenerror2(p_f1, p_f2, p_s, p_loc) \
182 (xoptgenerror2 (__FILE__, __LINE__, p_f1, p_f2, p_s, p_loc))
185 ** Report error if f1 is set and f2 is not set.
189 xoptgenerror2n (char *p_srcFile, int p_srcLine,
190 flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
191 /*@modifies *g_msgstream, internalState@*/ ;
194 optgenerror2n (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
195 /*@modifies *g_msgstream, internalState@*/ ;
196 # define optgenerror2n(p_f1, p_f2, p_s, p_loc) \
197 (xoptgenerror2n (__FILE__, __LINE__, p_f1, p_f2, p_s, p_loc))
199 extern /*@private@*/ bool xlloptgenerror (char *p_srcFile, int p_srcLine, flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
200 /*@modifies *g_msgstream, internalState@*/ ;
202 extern bool lloptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
203 /*@modifies *g_msgstream, internalState@*/ ;
204 # define lloptgenerror(p_o, p_s, p_loc) \
205 (xlloptgenerror (__FILE__, __LINE__, p_o, p_s, p_loc))
207 extern bool xllnoptgenerror (char *p_srcFile, int p_srcLine,
208 flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
209 /*@modifies *g_msgstream, internalState@*/ ;
211 extern bool llnoptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
212 /*@modifies *g_msgstream, internalState@*/ ;
213 # define llnoptgenerror(p_o, p_s, p_loc) \
214 (xllnoptgenerror (__FILE__, __LINE__, p_o, p_s, p_loc))
216 extern /*@private@*/ bool
217 xllgenformattypeerror (char *p_srcFile, int p_srcLine,
218 ctype p_t1, exprNode p_e1,
219 ctype p_t2, exprNode p_e2,
220 /*@only@*/ cstring p_s, fileloc p_fl)
221 /*@modifies *g_msgstream, internalState@*/ ;
223 extern bool llgenformattypeerror (ctype p_t1, exprNode p_e1,
224 ctype p_t2, exprNode p_e2,
225 /*@only@*/ cstring p_s, fileloc p_fl)
226 /*@modifies *g_msgstream, internalState@*/ ;
227 # define llgenformattypeerror(p_t1, p_e1, p_t2, p_e2, p_s, p_fl) \
228 xllgenformattypeerror (__FILE__, __LINE__, p_t1, p_e1, p_t2, p_e2, p_s, p_fl)
230 extern bool xllgentypeerror (char *p_srcFile, int p_srcLine,
231 ctype p_t1, exprNode p_e1,
232 ctype p_t2, exprNode p_e2,
233 /*@only@*/ cstring p_s,
235 /*@modifies *g_msgstream, internalState@*/ ;
237 extern bool llgentypeerror (ctype p_t1, exprNode p_e1,
238 ctype p_t2, exprNode p_e2,
239 /*@only@*/ cstring p_s,
241 /*@modifies *g_msgstream, internalState@*/ ;
242 # define llgentypeerror(p_t1, p_e1, p_t2, p_e2, p_s, p_fl) \
243 xllgentypeerror (__FILE__, __LINE__, p_t1, p_e1, p_t2, p_e2, p_s, p_fl)
245 extern bool gentypeerror (/*@sef@*/ ctype p_t1,
246 /*@sef@*/ exprNode p_e1,
247 /*@sef@*/ ctype p_t2,
248 /*@sef@*/ exprNode p_e2,
249 /*@sef@*/ /*@only@*/ cstring p_s,
250 /*@sef@*/ fileloc p_loc)
251 /*@modifies *g_msgstream, internalState@*/ ;
253 /*@-branchstate@*/ /* sef only s is freed on one branch */
254 #define gentypeerror(t1, e1, t2, e2, s, loc) \
255 (context_suppressFlagMsg (FLG_TYPE,loc) \
256 ? (flagcode_recordSuppressed (FLG_TYPE), FALSE) \
257 : llgentypeerror (t1, e1, t2, e2, s, loc))
261 ** These are macros to save evaluating s (which may be some expensive
262 ** message generation function).
266 optgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
267 /*@sef@*/ fileloc p_loc)
268 /*@modifies *g_msgstream, internalState@*/ ;
270 /*@-branchstate@*/ /* sef only s is freed on one branch */
271 #define optgenerror(o,s,loc) \
272 (context_suppressFlagMsg(o,loc) ? (flagcode_recordSuppressed(o), FALSE) \
273 : lloptgenerror (o, s, loc))
277 voptgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
278 /*@sef@*/ fileloc p_loc)
279 /*@modifies *g_msgstream, internalState@*/ ;
280 #define voptgenerror(o, s, loc) ((void) optgenerror(o,s,loc))
282 extern /*@private@*/ bool
283 xfsgenerror (char *p_srcFile, int p_srcLine,
284 flagSpec p_fs, /*@only@*/ cstring p_s, fileloc p_fl)
285 /*@modifies g_msgstream, internalState@*/ ;
287 extern bool fsgenerror (flagSpec p_fs, /*@only@*/ cstring p_s, fileloc p_fl)
288 /*@modifies g_msgstream, internalState@*/ ;
289 # define fsgenerror(p_fs, p_s, p_fl) \
290 xfsgenerror (__FILE__, __LINE__, p_fs, p_s, p_fl)
293 vfsgenerror (/*@sef@*/ flagSpec p_fs, /*@sef@*/ /*@only@*/ cstring p_s,
294 /*@sef@*/ fileloc p_loc)
295 /*@modifies *g_msgstream, internalState@*/ ;
296 #define vfsgenerror(fs, s, loc) ((void) fsgenerror(fs,s,loc))
299 ** Reports a warning when f1 is ON and f2 is ON
303 voptgenerror2 (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
304 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
305 #define voptgenerror2(f1, f2, s, loc) ((void) optgenerror2 (f1, f2, s, loc))
308 ** Reports a warning when f1 is ON and f2 is OFF
312 voptgenerror2n (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
313 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
314 #define voptgenerror2n(f1, f2, s, loc) ((void) optgenerror2n (f1, f2, s, loc))
316 extern void noptgenerror (/*@sef@*/ flagcode p_code,
317 /*@sef@*/ /*@only@*/ cstring p_s,
318 /*@sef@*/ fileloc p_loc);
319 /*@-branchstate@*/ /* sef only s is freed on one branch */
320 #define noptgenerror(o,s,loc) \
321 (context_suppressNotFlagMsg (o, loc) \
322 ? (flagcode_recordSuppressed(o), FALSE) \
323 : llnoptgenerror (o, s, loc))
327 vnoptgenerror (/*@sef@*/ flagcode p_code, /*@sef@*/ /*@only@*/ cstring p_msg,
328 /*@sef@*/ fileloc p_loc);
329 # define vnoptgenerror(o, s, loc) ((void) noptgenerror(o, s, loc))
332 vgenhinterror (flagcode p_code, /*@only@*/ cstring p_mst,
333 /*@only@*/ cstring p_hint, /*@sef@*/ fileloc p_loc);
334 # define vgenhinterror(o, s, h, loc) \
335 ((void) llgenhinterror(o, s, h, loc))
338 extern /*@private@*/ bool /*@alt void@*/ xllforceerror (char *p_srcFile, int p_srcLine, flagcode p_code, /*@only@*/ cstring p_s, fileloc p_fl)
339 /*@modifies g_msgstream@*/ ;
341 extern bool /*@alt void@*/ llforceerror (flagcode p_code, /*@only@*/ cstring p_s, fileloc p_fl)
342 /*@modifies g_msgstream@*/ ;
343 # define llforceerror(p_code, p_s, p_fl) \
344 (xllforceerror (__FILE__, __LINE__, p_code, p_s, p_fl))
346 extern void llerrorlit (flagcode p_o, char *p_s);
347 # define llerrorlit(o, s) ((void) llerror (o, cstring_makeLiteral (s)))
349 extern void llgenindentmsg (/*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
351 extern /*@exits@*/ void llbugexitlit (char *p_s);
352 # define llbugexitlit(s) (llbug (cstring_makeLiteral (s)))
354 extern void llbuglit (char *p_s);
355 # define llbuglit(s) (llbug (cstring_makeLiteral (s)))
357 extern void llcontbuglit (char *p_s);
358 # define llcontbuglit(s) (llbug (cstring_makeLiteral (s)))
360 extern void checkParseError (void);
362 extern void llmsglit (char *p_s);
363 # define llmsglit(s) (llmsg (cstring_makeLiteral (s)))
365 extern void ppllerror (/*@only@*/ cstring p_s);
366 extern void genppllerrorhint (flagcode p_code, /*@only@*/ cstring p_s,
367 /*@only@*/ cstring p_hint);
368 extern void genppllerror (flagcode p_code, /*@only@*/ cstring p_s);
369 extern /*@unused@*/ void pplldiagmsg (/*@only@*/ cstring p_s);
370 extern void loadllmsg (/*@only@*/ cstring p_s);
372 extern void llgenindentmsgnoloc (/*@only@*/ cstring p_s);
374 extern /*@observer@*/ cstring lldecodeerror (int) /*@*/ ;
376 extern void prepareMessage (void) /*@modifies internalState, g_msgstream@*/ ;
377 extern void closeMessage (void) /*@modifies internalState, g_msgstream@*/ ;
379 extern void llflush (void) /*@modifies systemState@*/ ;
382 # error "Multiple include"