#include "error.h" #include "source.h" #include char* error_tag_human_readable(error_tag err_tag) { switch (err_tag) { case ERROR_PARSE_ERROR: return "Parse error"; case ERROR_UNRECOGNISED_TOKEN: return "Unrecognised token"; case ERROR_UNTERMINATED_STRING_LITERAL: return "Unterminated string literal"; case ERROR_EXPECTED_RPAREN: return "Expected closing parenthesis"; case ERROR_EXPECTED_RBRACE: return "Expected closing brace"; case ERROR_EXPECTED_EXPRESSION: return "Expected expression"; case ERROR_INVALID_PATTERN: return "Invalid pattern"; case ERROR_EXPECTED_SEMI: return "Expected semicolon"; case ERROR_UNKNOWN_VARIABLE: return "Unknown variable"; case WARNING: return "Warning"; } } void error_default_handler(error_t err) { source_print_pos(err.source, err.position); fprintf(stderr,": %s\n", error_tag_human_readable(err.tag)); source_print_line(err.source, err.position, err.highlight_len); fprintf(stderr,"\n"); } static void (*global_handler)(error_t err) = error_default_handler; void error_set_handler(void (*eh)(error_t err)) { global_handler = eh; } void error_report(error_t error) { global_handler(error); }