#pragma once #include #include typedef struct { size_t idx; int line; int col; } Loc; #define REPORTF_ERROR(FMT, ...) \ (fprintf( \ stderr, "\x1b[1;91merror\x1b[1;97m: " FMT "\x1b[0m\n", __VA_ARGS__)) #define REPORTF_INFO(FMT, ...) \ (fprintf(stderr, "\x1b[1;96minfo\x1b[1;97m: " FMT "\x1b[0m\n", __VA_ARGS__)) #define REPORTF_WARNING(FMT, ...) \ (fprintf( \ stderr, "\x1b[1;93mwarning\x1b[1;97m: " FMT "\x1b[0m\n", __VA_ARGS__)) void print_report_loc( const char* filename, const char* text, size_t text_len, Loc loc); typedef struct { const char* filename; const char* text; size_t text_len; } Reporter; void reporter_print_loc(Reporter* rep, Loc loc); void reporter_error_with_loc(Reporter* rep, const char* msg, Loc loc);