X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=error.c;h=b9cf740b6b5ddae8383ff718b87a76598dc6a25e;hb=bb1f38de5d36b0d7c4a0a9fa8743ae6ecd8a205b;hp=c220d72e57edd71c6af6465d1cf3c757e7da5b2e;hpb=48a95ec3c9a4a8601f97c8ac1adbd7d94ba15465;p=xonotic%2Fgmqcc.git diff --git a/error.c b/error.c index c220d72..b9cf740 100644 --- a/error.c +++ b/error.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2012 - * Dale Weiler + * Copyright (C) 2012 + * Dale Weiler * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -21,9 +21,7 @@ * SOFTWARE. */ #include -#include -#include -#include +#include "gmqcc.h" /* * Compiler error system, this handles the error printing, and managing @@ -31,57 +29,64 @@ * intereting like colors for the console. */ #ifndef WIN32 -# define CON_BLACK 30 -# define CON_RED 31 -# define CON_GREEN 32 -# define CON_BROWN 33 -# define CON_BLUE 34 -# define CON_MAGENTA 35 -# define CON_CYAN 36 -# define CON_WHITE 37 +enum { + CON_BLACK = 30, + CON_RED, + CON_GREEN, + CON_BROWN, + CON_BLUE, + CON_MAGENTA, + CON_CYAN , + CON_WHITE +}; static const int error_color[] = { - CON_RED, - CON_CYAN, - CON_MAGENTA + CON_RED, + CON_CYAN, + CON_MAGENTA, + CON_BLUE, + CON_BROWN, + CON_WHITE }; #endif int error_total = 0; int error_max = 10; static const char *const error_list[] = { - "Parsing Error:", - "Lexing Error:", - "Internal Error:" + "Parsing Error:", + "Lexing Error:", + "Internal Error:", + "Compilation Error:", + "Preprocessor Error:" }; -int error(int status, const char *msg, ...) { - char bu[1024*4]; /* enough? */ - char fu[1024*4]; /* enough? */ - va_list va; - - if (error_total + 1 > error_max) { - fprintf(stderr, "%d errors and more following, bailing\n", error_total); - exit (-1); - } - error_total ++; +int error(lex_file *file, int status, const char *msg, ...) { + char bu[1024*4]; /* enough? */ + char fu[1024*4]; /* enough? */ + va_list va; + + if (error_total + 1 > error_max) { + fprintf(stderr, "%d errors and more following, bailing\n", error_total); + exit (-1); + } + error_total ++; /* color */ -# ifndef WIN32 - sprintf (bu, "\033[0;%dm%s \033[0;%dm", error_color[status-SHRT_MAX], error_list[status-SHRT_MAX], error_color[(status-1)-SHRT_MAX]); +# ifndef WIN32 + sprintf (bu, "\033[0;%dm%s \033[0;%dm %s:%d ", error_color[status-SHRT_MAX], error_list[status-SHRT_MAX], error_color[(status-1)-SHRT_MAX], file->name, file->line); #else - sprintf (bu, "%s ", error_list[status-SHRT_MAX]); + sprintf (bu, "%s ", error_list[status-SHRT_MAX]); #endif - va_start (va, msg); - vsprintf (fu, msg, va); - va_end (va); - fputs (bu, stderr); - fputs (fu, stderr); + va_start (va, msg); + vsprintf (fu, msg, va); + va_end (va); + fputs (bu, stderr); + fputs (fu, stderr); /* color */ -# ifndef WIN32 - fputs ("\033[0m", stderr); -# endif - - fflush (stderr); - - return status; +# ifndef WIN32 + fputs ("\033[0m", stderr); +# endif + + fflush (stderr); + + return status; }