add full return err support in parser

This commit is contained in:
2025-07-09 14:34:00 +01:00
parent 0cb55fc563
commit 66b44e8f3a
11 changed files with 118 additions and 60 deletions

View File

@@ -92,20 +92,21 @@ void output_err(ArErr err) {
getline(&buffer, &size, file);
char *line_starts = buffer;
while (*line_starts && isspace((unsigned char)*line_starts)) {
char line_column = err.column;
while (*line_starts && isspace((unsigned char)*line_starts) && line_starts-buffer < err.column) {
line_starts++;
err.column--;
line_column--;
}
fprintf(stderr, " %zu | ", err.line);
if (err.length) {
fprintf(stderr, "%.*s", (int)err.column - 1, line_starts);
fprintf(stderr, "%.*s", (int)line_column - 1, line_starts);
dyefg(stderr, DYE_RED);
dye_style(stderr, DYE_STYLE_BOLD);
fprintf(stderr, "%.*s", err.length, line_starts + err.column - 1);
fprintf(stderr, "%.*s", err.length, line_starts + line_column - 1);
dye_style(stderr, DYE_STYLE_RESET);
dyefg(stderr, DYE_RESET);
fprintf(stderr, "%s", line_starts + (int)err.column + err.length - 1);
for (int64_t i = 0; i < err.column - 1; i++) {
fprintf(stderr, "%s", line_starts + (int)line_column + err.length - 1);
for (int64_t i = 0; i < line_column - 1; i++) {
fprintf(stderr, " ");
}
} else {
@@ -118,7 +119,7 @@ void output_err(ArErr err) {
}
fprintf(stderr, "| ");
for (int i = 1; i < err.column; i++) {
for (int i = 1; i < line_column; i++) {
fprintf(stderr, " ");
}
dyefg(stderr, DYE_RED);