the hito embeddable programming language
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}