Mercurial > hg > index.cgi
comparison lwasm/lwasm.h @ 370:8764142b3192
Convert internal error/warning handling framework to a new unified system
Replace the ad hoc error and warning handling with a new system that
codifies the errors with specific codes. This makes it possible in the
future for error numbers to be used for testing and other purposes. It also
makes sure the error strings themselves are consistent.
Thanks to Erik G <erik@6809.org> for the patch.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 22 Jun 2015 18:49:38 -0600 |
parents | c6d2a1f54e0c |
children | 8e25147c2aa8 |
comparison
equal
deleted
inserted
replaced
369:682524a1f32f | 370:8764142b3192 |
---|---|
123 unsigned char *obytes; // output buffer | 123 unsigned char *obytes; // output buffer |
124 reloctab_t *reloctab; // table of relocations | 124 reloctab_t *reloctab; // table of relocations |
125 sectiontab_t *next; | 125 sectiontab_t *next; |
126 }; | 126 }; |
127 | 127 |
128 typedef enum | |
129 { | |
130 E_6309_INVALID, | |
131 E_6809_INVALID, | |
132 E_ALIGNMENT_INVALID, | |
133 E_BITNUMBER_UNRESOLVED, | |
134 E_BITNUMBER_INVALID, | |
135 E_BYTE_OVERFLOW, | |
136 E_CONDITION_P1, | |
137 E_DIRECTIVE_OS9_ONLY, | |
138 E_DIV0, | |
139 E_EXEC_ADDRESS, | |
140 E_FILL_INVALID, | |
141 E_IMMEDIATE_INVALID, | |
142 E_IMMEDIATE_UNRESOLVED, | |
143 E_EXPRESSION_BAD, | |
144 E_EXPRESSION_NOT_CONST, | |
145 E_EXPRESSION_NOT_RESOLVED, | |
146 E_FILE_OPEN, | |
147 E_FILENAME_MISSING, | |
148 E_INSTRUCTION_FAILED, | |
149 E_INSTRUCTION_SECTION, | |
150 E_LINE_ADDRESS, | |
151 E_LINED_ADDRESS, | |
152 E_MACRO_DUPE, | |
153 E_MACRO_ENDM, | |
154 E_MACRO_NONAME, | |
155 E_MACRO_RECURSE, | |
156 E_MODULE_IN, | |
157 E_MODULE_NOTIN, | |
158 E_NEGATIVE_BLOCKSIZE, | |
159 E_NEGATIVE_RESERVATION, | |
160 E_NW_8, | |
161 E_OPCODE_BAD, | |
162 E_OPERAND_BAD, | |
163 E_OBJTARGET_ONLY, | |
164 E_PADDING_BAD, | |
165 E_PRAGMA_UNRECOGNIZED, | |
166 E_REGISTER_BAD, | |
167 E_SECTION_END, | |
168 E_SECTION_EXTDEP, | |
169 E_SECTION_FLAG, | |
170 E_SECTION_NAME, | |
171 E_SECTION_TARGET, | |
172 E_SETDP_INVALID, | |
173 E_SETDP_NOT_CONST, | |
174 E_STRING_BAD, | |
175 E_STRUCT_DUPE, | |
176 E_STRUCT_NONAME, | |
177 E_STRUCT_NOSYMBOL, | |
178 E_STRUCT_RECURSE, | |
179 E_SYMBOL_BAD, | |
180 E_SYMBOL_DUPE, | |
181 E_SYMBOL_MISSING, | |
182 E_SYMBOL_UNDEFINED, | |
183 E_SYMBOL_UNDEFINED_EXPORT, | |
184 E_UNKNOWN_OPERATION, | |
185 E_USER_SPECIFIED, | |
186 | |
187 /* warnings must be 1000 or greater */ | |
188 | |
189 W_DUPLICATE_SECTION = 1000, | |
190 W_ENDSTRUCT_WITHOUT = 1001, | |
191 W_NOT_SUPPORTED = 1002, | |
192 W_USER_SPECIFIED = 1003 | |
193 } lwasm_errorcode_t; | |
194 | |
128 typedef struct lwasm_error_s lwasm_error_t; | 195 typedef struct lwasm_error_s lwasm_error_t; |
129 struct lwasm_error_s | 196 struct lwasm_error_s |
130 { | 197 { |
198 lwasm_errorcode_t code; // error code | |
131 char *mess; // actual error message | 199 char *mess; // actual error message |
132 int charpos; // character position on line where parsing stopped | 200 int charpos; // character position on line where parsing stopped |
133 lwasm_error_t *next; // ptr to next error | 201 lwasm_error_t *next; // ptr to next error |
134 }; | 202 }; |
135 | 203 |
325 extern struct symtabe *register_symbol(asmstate_t *as, line_t *cl, char *sym, lw_expr_t value, int flags); | 393 extern struct symtabe *register_symbol(asmstate_t *as, line_t *cl, char *sym, lw_expr_t value, int flags); |
326 extern struct symtabe *lookup_symbol(asmstate_t *as, line_t *cl, char *sym); | 394 extern struct symtabe *lookup_symbol(asmstate_t *as, line_t *cl, char *sym); |
327 | 395 |
328 #endif | 396 #endif |
329 | 397 |
398 void lwasm_register_error(asmstate_t *as, line_t *cl, lwasm_errorcode_t err); | |
399 void lwasm_register_error2(asmstate_t *as, line_t *cl, lwasm_errorcode_t err, const char* fmt, ...); | |
400 | |
330 #ifndef ___lwasm_c_seen___ | 401 #ifndef ___lwasm_c_seen___ |
331 | |
332 extern void lwasm_register_error(asmstate_t *as, line_t *cl, const char *msg, ...); | |
333 extern void lwasm_register_warning(asmstate_t *as, line_t *cl, const char *msg, ...); | |
334 | |
335 extern void lwasm_register_error_n(asmstate_t *as, line_t *cl, char *iptr, const char *msg, ...); | |
336 extern void lwasm_register_warning_n(asmstate_t *as, line_t *cl, char *iptr, const char *msg, ...); | |
337 | 402 |
338 extern int lwasm_next_context(asmstate_t *as); | 403 extern int lwasm_next_context(asmstate_t *as); |
339 extern void lwasm_emit(line_t *cl, int byte); | 404 extern void lwasm_emit(line_t *cl, int byte); |
340 extern void lwasm_emitop(line_t *cl, int opc); | 405 extern void lwasm_emitop(line_t *cl, int opc); |
341 | 406 |