X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=error.c;h=2f96caf9ab2a14a324906aae9b57fed4978270f7;hb=a68b56c2c3879de6beba28ec3beb2dde1f41e31f;hp=c220d72e57edd71c6af6465d1cf3c757e7da5b2e;hpb=48a95ec3c9a4a8601f97c8ac1adbd7d94ba15465;p=xonotic%2Fgmqcc.git diff --git a/error.c b/error.c index c220d72..2f96caf 100644 --- a/error.c +++ b/error.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2012 - * Dale Weiler + * 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,62 @@ * 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 +# 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 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(struct 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; }