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