1#include "common_includes.h"
9static int g_error_count = 0;
11void error_init(
void) {
15int error_count(
void) {
19bool error_has_errors(
void) {
20 return g_error_count > 0;
23void error_reset(
void) {
27static const char *error_type_to_string(ErrorType type) {
29 case ERROR_LEXICAL:
return "Lexical Error";
30 case ERROR_SYNTAX:
return "Syntax Error";
31 case ERROR_SEMANTIC:
return "Semantic Error";
32 case ERROR_INTERNAL:
return "Internal Error";
33 case ERROR_FATAL:
return "Fatal Error";
34 default:
return "Unknown Error";
40static void print_formatted_message(FILE *stream,
const char *format, va_list args) {
44 vsnprintf(buffer,
sizeof(buffer), format, args);
46 fprintf(stream,
"%s", buffer);
49void error_fatal(
const char *fmt, ...) {
53 fprintf(stderr,
"FATAL ERROR: ");
54 print_formatted_message(stderr, fmt, args);
55 fprintf(stderr,
"\n");
62void error_report(ErrorType type,
int line,
int column,
const char *format, ...) {
63 fprintf(stderr,
"%s", error_type_to_string(type));
66 fprintf(stderr,
" at line %d", line);
68 fprintf(stderr,
", column %d", column);
72 fprintf(stderr,
": ");
75 va_start(args, format);
76 print_formatted_message(stderr, format, args);
79 fprintf(stderr,
"\n");
83 if (type == ERROR_FATAL) {
88void error_syntax(
int line,
int column,
const char *format, ...) {
89 fprintf(stderr,
"Syntax Error at line %d, column %d: ", line, column);
92 va_start(args, format);
93 print_formatted_message(stderr, format, args);
96 fprintf(stderr,
"\n");
100void error_semantic(
int line,
int column,
const char *format, ...) {
101 fprintf(stderr,
"Semantic Error at line %d, column %d: ", line, column);
104 va_start(args, format);
105 print_formatted_message(stderr, format, args);
108 fprintf(stderr,
"\n");