error.c (1172B)
1 #include <stdarg.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 #include <scc/scc.h> 6 #include "cc1.h" 7 8 #define MAXERRNUM 10 9 10 extern int failure; 11 static unsigned nerrors; 12 13 static void 14 warn_error(int flag, char *fmt, va_list va) 15 { 16 if (flag == 0) 17 return; 18 fprintf(stderr, "%s:%u: %s: ", 19 filenam, lineno, 20 (flag < 0) ? "error" : "warning"); 21 vfprintf(stderr, fmt, va); 22 putc('\n', stderr); 23 24 if (flag < 0) { 25 if (!failure) 26 fclose(stdout); 27 failure = 1; 28 if (++nerrors == MAXERRNUM) { 29 fputs("too many errors\n", stderr); 30 exit(1); 31 } 32 } 33 } 34 35 void 36 warn(char *fmt, ...) 37 { 38 extern int warnings; 39 40 va_list va; 41 va_start(va, fmt); 42 warn_error(warnings, fmt, va); 43 va_end(va); 44 } 45 46 void 47 error(char *fmt, ...) 48 { 49 va_list va; 50 51 va_start(va, fmt); 52 warn_error(-1, fmt, va); 53 va_end(va); 54 discard(); 55 } 56 57 void 58 errorp(char *fmt, ...) 59 { 60 va_list va; 61 va_start(va, fmt); 62 warn_error(-1, fmt, va); 63 va_end(va); 64 } 65 66 void 67 cpperror(char *fmt, ...) 68 { 69 va_list va; 70 va_start(va, fmt); 71 warn_error(-1, fmt, va); 72 va_end(va); 73 74 /* discard input until the end of the line */ 75 if (input) 76 *input->p = '\0'; 77 next(); 78 } 79 80 void 81 unexpected(void) 82 { 83 error("unexpected '%s'", yytext); 84 }