2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2000.
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);
16 # define llassert(tst) \
18 if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \
19 lldiagmsg (message ("%s:%d: at source point", \
20 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
21 llbuglit ("llassert failed: " #tst); \
24 extern /*@falseexit@*/ void llassertfatal (/*@sef@*/ bool p_test);
25 # define llassertfatal(tst) \
27 llfatalbug (message("%s:%d: fatal llassert failed: " #tst, \
28 cstring_makeLiteralTemp (__FILE__), __LINE__)); \
32 ** llassertprint and llassertprintret are in lclintMacros.nf
35 extern void llmsg (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
36 extern void lldiagmsg (/*@only@*/ cstring p_s) /*@modifies stderr@*/ ;
37 extern void llmsgplain (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
38 extern void llhint (/*@only@*/ cstring p_s)
39 /*@globals g_currentloc, g_msgstream;@*/
40 /*@modifies g_msgstream@*/ ;
41 extern /*@exits@*/ void llfatalbug (/*@only@*/ cstring p_s)
42 /*@globals g_currentloc@*/
43 /*@modifies stderr@*/ ;
44 extern void llgloberror (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
45 extern bool llgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
46 extern bool llgenhinterror (flagcode p_o, /*@only@*/ cstring p_s, /*@only@*/ cstring p_hint,
47 fileloc p_fl) /*@modifies g_msgstream@*/ ;
48 extern void llerror (flagcode p_o, /*@only@*/ cstring p_s)
49 /*@globals g_msgstream, g_currentloc@*/
50 /*@modifies g_msgstream@*/ ;
51 extern void llgenmsg (/*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
52 extern /*@exits@*/ void llfatalerror (/*@only@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
53 extern /*@exits@*/ void llfatalerrorLoc (/*@only@*/ cstring p_s)
54 /*@globals g_currentloc@*/
55 /*@modifies stderr@*/ ;
56 extern void llparseerror (/*@only@*/ cstring p_s)
57 /*@globals g_msgstream, g_currentloc@*/
58 /*@modifies g_msgstream@*/ ;
61 extern /*@exits@*/ void lclplainfatalerror (/*@only@*/ cstring p_msg) /*@modifies g_msgstream@*/ ;
62 extern /*@exits@*/ void lclfatalbug (/*@temp@*/ char *p_msg) /*@modifies g_msgstream@*/ ;
63 extern int lclNumberErrors (void) /*@*/ ;
64 extern bool lclHadNewError (void) /*@modifies internalState@*/ ;
65 extern /*@exits@*/ void lclfatalerror (ltoken p_t, /*@only@*/ cstring p_msg);
66 extern void lclerror (ltoken p_t, /*@only@*/ cstring p_msg);
68 extern void lclbug (/*@only@*/ cstring p_s);
69 extern void lclplainerror (/*@only@*/ cstring p_msg);
70 extern bool lclHadError (void);
71 extern void lclRedeclarationError (ltoken p_id);
74 extern void flagWarning (/*@observer@*/ cstring p_s) /*@modifies g_msgstream@*/ ;
76 extern /*@exits@*/ void llbugaux (cstring p_file, int p_line, /*@only@*/ cstring p_s)
77 /*@globals g_msgstream, g_currentloc@*/
78 /*@modifies *g_msgstream@*/ ;
80 extern /*@exits@*/ void llbug (/*@only@*/ cstring p_s)
81 /*@globals g_msgstream, g_currentloc@*/
82 /*@modifies *g_msgstream@*/ ;
84 /* doesn't really exit, but don't mind errors if it doesn't */
85 # define llbug(s) llbugaux (cstring_makeLiteralTemp (__FILE__), __LINE__, s)
87 extern void llquietbugaux (/*@only@*/ cstring p_s, cstring, int) /*@modifies *g_msgstream@*/ ;
88 extern void llquietbug (/*@only@*/ cstring) /*@modifies *g_msgstream@*/ ;
89 # define llquietbug(s) llquietbugaux (s, cstring_makeLiteralTemp (__FILE__), __LINE__)
91 extern void llcontbug (/*@only@*/ cstring p_s) /*@modifies *g_msgstream@*/ ;
92 /* doesn't really exit, but don't mind errors if it doesn't */
93 # define llcontbug(s) (llbug (s))
95 extern void cleanupMessages (void)
96 /*@globals g_msgstream, g_currentloc;@*/
97 /*@modifies g_msgstream, internalState@*/ ;
100 ** Report error iff f1 and f2 are set.
104 optgenerror2 (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
105 /*@modifies *g_msgstream, internalState@*/ ;
108 ** Report error if f1 is set and f2 is not set.
112 optgenerror2n (flagcode p_f1, flagcode p_f2, /*@only@*/ cstring p_s, fileloc p_loc)
113 /*@modifies *g_msgstream, internalState@*/ ;
115 extern bool lloptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
116 /*@modifies *g_msgstream, internalState@*/ ;
118 extern bool llnoptgenerror (flagcode p_o, /*@only@*/ cstring p_s, fileloc p_loc)
119 /*@modifies *g_msgstream, internalState@*/ ;
121 extern bool llgenformattypeerror (ctype p_t1, exprNode p_e1,
122 ctype p_t2, exprNode p_e2,
123 /*@only@*/ cstring p_s, fileloc p_fl)
124 /*@modifies *g_msgstream, internalState@*/ ;
126 extern bool llgentypeerror (ctype p_t1, exprNode p_e1,
127 ctype p_t2, exprNode p_e2,
128 /*@only@*/ cstring p_s,
130 /*@modifies *g_msgstream, internalState@*/ ;
132 extern bool gentypeerror (/*@sef@*/ ctype p_t1,
133 /*@sef@*/ exprNode p_e1,
134 /*@sef@*/ ctype p_t2,
135 /*@sef@*/ exprNode p_e2,
136 /*@sef@*/ /*@only@*/ cstring p_s,
137 /*@sef@*/ fileloc p_loc)
138 /*@modifies *g_msgstream, internalState@*/ ;
140 /*@-branchstate@*/ /* sef only s is freed on one branch */
141 #define gentypeerror(t1, e1, t2, e2, s, loc) \
142 (context_suppressFlagMsg (FLG_TYPE,loc) \
143 ? (flagcode_recordSuppressed (FLG_TYPE), FALSE) \
144 : llgentypeerror (t1, e1, t2, e2, s, loc))
148 ** These are macros to save evaluating s (which may be some expensive
149 ** message generation function).
153 optgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
154 /*@sef@*/ fileloc p_loc)
155 /*@modifies *g_msgstream, internalState@*/ ;
157 /*@-branchstate@*/ /* sef only s is freed on one branch */
158 #define optgenerror(o,s,loc) \
159 (context_suppressFlagMsg(o,loc) ? (flagcode_recordSuppressed(o), FALSE) \
160 : lloptgenerror (o, s, loc))
164 voptgenerror (/*@sef@*/ flagcode p_o, /*@sef@*/ /*@only@*/ cstring p_s,
165 /*@sef@*/ fileloc p_loc)
166 /*@modifies *g_msgstream, internalState@*/ ;
167 #define voptgenerror(o, s, loc) ((void) optgenerror(o,s,loc))
170 voptgenerror2 (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
171 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
172 #define voptgenerror2(f1, f2, s, loc) ((void) optgenerror2 (f1, f2, s, loc))
175 voptgenerror2n (/*@sef@*/ flagcode p_f1, /*@sef@*/ flagcode p_f2,
176 /*@sef@*/ /*@only@*/ cstring p_s, /*@sef@*/ fileloc p_loc);
177 #define voptgenerror2n(f1, f2, s, loc) ((void) optgenerror2n (f1, f2, s, loc))
179 extern void noptgenerror (/*@sef@*/ flagcode p_code,
180 /*@sef@*/ /*@only@*/ cstring p_s,
181 /*@sef@*/ fileloc p_loc);
182 /*@-branchstate@*/ /* sef only s is freed on one branch */
183 #define noptgenerror(o,s,loc) \
184 (context_suppressNotFlagMsg (o, loc) \
185 ? (flagcode_recordSuppressed(o), FALSE) \
186 : llnoptgenerror (o, s, loc))
190 vnoptgenerror (/*@sef@*/ flagcode p_code, /*@sef@*/ /*@only@*/ cstring p_msg,
191 /*@sef@*/ fileloc p_loc);
192 # define vnoptgenerror(o, s, loc) ((void) noptgenerror(o, s, loc))
195 vgenhinterror (flagcode p_code, /*@only@*/ cstring p_mst,
196 /*@only@*/ cstring p_hint, /*@sef@*/ fileloc p_loc);
197 # define vgenhinterror(o, s, h, loc) \
198 ((void) llgenhinterror(o, s, h, loc))
200 extern void llforceerror (flagcode p_code, /*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
202 extern void llerrorlit (flagcode p_o, char *p_s);
203 extern void llgenindentmsg (/*@only@*/ cstring p_s, fileloc p_fl) /*@modifies g_msgstream@*/ ;
205 extern /*@exits@*/ void llbugexitlit (char *p_s);
206 extern void llbuglit (char *p_s);
207 extern void llcontbuglit (char *p_s);
209 # define llerror(o, s) ((void) llgenerror (o, s, g_currentloc))
210 # define llerrorlit(o, s) ((void) llerror (o, cstring_makeLiteral (s)))
211 # define llbuglit(s) (llbug (cstring_makeLiteral (s)))
212 # define llcontbuglit(s) (llbug (cstring_makeLiteral (s)))
213 # define llbugexitlit(s) (llbug (cstring_makeLiteral (s)))
215 extern void checkParseError (void);
217 extern void llmsglit (char *p_s);
218 # define llmsglit(s) (llmsg (cstring_makeLiteral (s)))
220 extern void ppllerror (/*@only@*/ cstring p_s);
221 extern void genppllerrorhint (flagcode p_code, /*@only@*/ cstring p_s,
222 /*@only@*/ cstring p_hint);
223 extern void genppllerror (flagcode p_code, /*@only@*/ cstring p_s);
224 extern /*@unused@*/ void pplldiagmsg (/*@only@*/ cstring p_s);
225 extern void loadllmsg (/*@only@*/ cstring p_s);
227 extern void llgenindentmsgnoloc (/*@only@*/ cstring p_s);
229 extern /*@observer@*/ cstring lldecodeerror (int) /*@*/ ;
231 extern void prepareMessage (void) /*@modifies internalState, g_msgstream@*/ ;
232 extern void closeMessage (void) /*@modifies internalState, g_msgstream@*/ ;
234 extern void llflush (void) /*@modifies systemState@*/ ;
237 # error "Multiple include"