#ifndef error_h #define error_h #include "source.h" typedef enum { ERROR_UNRECOGNISED_TOKEN, ERROR_UNTERMINATED_STRING_LITERAL, ERROR_PARSE_ERROR, ERROR_EXPECTED_RPAREN, ERROR_EXPECTED_RBRACE, ERROR_EXPECTED_EXPRESSION, ERROR_INVALID_PATTERN, ERROR_EXPECTED_SEMI, ERROR_UNKNOWN_VARIABLE, WARNING } error_tag; typedef struct { error_tag tag; source_t *source; pos_t position; int highlight_len; } error_t; static inline error_t error(error_tag tag, source_t *source, pos_t position, int highlight_len) { error_t it = { .tag = tag, .source = source, .position = position, .highlight_len = highlight_len }; return it; } char* error_tag_human_readable(error_tag err_tag); void error_set_handler(void (*eh)(error_t err)); void error_default_handler(error_t err); void error_report(error_t error); #endif