-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherror.c
62 lines (59 loc) · 1.85 KB
/
error.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "error.h"
void ice_error(int line, int start_col, int end_col, const char* line_text, const char *error, ...)
{
va_list args;
printf("error: ");
printf("(Line: %i, Col: %i) ", line, end_col);
va_start(args, error);
vprintf(error, args);
va_end(args);
while (line_text == ' ') line_text++; // Skip whitespace
printf("\t\t\n\t\t");
for (int i = (start_col > 10 && start_col < 35 ? start_col - 10 : 0); i < end_col + 1; i++)
printf("%c", *(line_text + i));
printf("\n\t\t");
for (int i = (start_col > 10 && start_col < 35 ? start_col - 10 : 0); i < end_col; i++) printf("~");
printf("^\n");
exit(1);
}
void ice_error_expected_token(int line, int end_col, const char *line_text, int start_col, const char* error, const char* expected_token, ...)
{
va_list args;
printf("error: ");
printf("(Line: %i, Col: %i) ", line, end_col);
va_start(args, error);
vprintf(error, args);
va_end(args);
while (line_text == ' ') line_text++; // Skip whitespace
printf("\t\t\n\t\t");
for (int i = (start_col > 10 && start_col < 35 ? start_col - 10 : 0); i < end_col + 1; i++)
printf("%c", *(line_text + i));
printf("\n\t\t");
for (int i = (start_col > 10 && start_col < 35 ? start_col - 10 : 0); i < end_col + 1; i++)
printf("~");
printf("^\n");
printf("\n\t\t");
for (int i = (start_col > 10 && start_col < 35 ? start_col - 10 : 0); i < end_col + 1; i++)
printf(" ");
printf("%s\n", expected_token);
printf("Expected value '%s' instead of '%c'.\n", expected_token, *(line_text + end_col));
exit(1);
}
void warning(const char *warning, ...)
{
va_list args;
va_start(args, warning);
printf("warning: ");
vprintf(warning, args);
printf("\n");
va_end(args);
}
void fatal(const char* error, ...)
{
va_list args;
va_start(args, error);
printf("fatal: ");
vprintf(error, args);
va_end(args);
exit(1);
}