the hito embeddable programming language
at main 33 lines 1.2 kB view raw
1#include "error.h" 2#include "source.h" 3#include <stdio.h> 4char* error_tag_human_readable(error_tag err_tag) { 5 switch (err_tag) { 6 case ERROR_PARSE_ERROR: return "Parse error"; 7 case ERROR_UNRECOGNISED_TOKEN: return "Unrecognised token"; 8 case ERROR_UNTERMINATED_STRING_LITERAL: return "Unterminated string literal"; 9 case ERROR_EXPECTED_RPAREN: return "Expected closing parenthesis"; 10 case ERROR_EXPECTED_RBRACE: return "Expected closing brace"; 11 case ERROR_EXPECTED_EXPRESSION: return "Expected expression"; 12 case ERROR_INVALID_PATTERN: return "Invalid pattern"; 13 case ERROR_EXPECTED_SEMI: return "Expected semicolon"; 14 case ERROR_UNKNOWN_VARIABLE: return "Unknown variable"; 15 case WARNING: return "Warning"; 16 } 17} 18 19 20void error_default_handler(error_t err) { 21 source_print_pos(err.source, err.position); 22 fprintf(stderr,": %s\n", error_tag_human_readable(err.tag)); 23 source_print_line(err.source, err.position, err.highlight_len); 24 fprintf(stderr,"\n"); 25} 26 27static void (*global_handler)(error_t err) = error_default_handler; 28void error_set_handler(void (*eh)(error_t err)) { 29 global_handler = eh; 30} 31void error_report(error_t error) { 32 global_handler(error); 33}