1#include <stdarg.h>2#include <stdio.h>3#include <stdlib.h>45#include <scc/cstd.h>6#include <scc/scc.h>78#include "cc1.h"910#define MAXERRNUM 101112extern int failure;13static unsigned nerrors;1415static void16warn_error(int flag, char *fmt, va_list va)17{18 if (flag == 0)19 return;20 fprintf(stderr, "%s:%u: %s: ",21 filenam, lineno,22 (flag < 0) ? "error" : "warning");23 vfprintf(stderr, fmt, va);24 putc('\n', stderr);2526 if (flag < 0) {27 if (!failure)28 fclose(stdout);29 failure = 1;30 if (++nerrors == MAXERRNUM) {31 fputs("too many errors\n", stderr);32 exit(1);33 }34 }35}3637void38warn(char *fmt, ...)39{40 extern int warnings;4142 va_list va;43 va_start(va, fmt);44 warn_error(warnings, fmt, va);45 va_end(va);46}4748void49error(char *fmt, ...)50{51 va_list va;5253 va_start(va, fmt);54 warn_error(-1, fmt, va);55 va_end(va);56 discard();57}5859void60errorp(char *fmt, ...)61{62 va_list va;63 va_start(va, fmt);64 warn_error(-1, fmt, va);65 va_end(va);66}6768void69cpperror(char *fmt, ...)70{71 va_list va;72 va_start(va, fmt);73 warn_error(-1, fmt, va);74 va_end(va);7576 /* discard input until the end of the line */77 if (input)78 *input->p = '\0';79 next();80}8182void83unexpected(void)84{85 error("unexpected '%s'", yytext);86}