diff options
| author | 2022-08-16 05:28:18 +0200 | |
|---|---|---|
| committer | 2022-08-16 05:28:18 +0200 | |
| commit | 73f68a9c5ed4c8139cc1c4f7695da29e5a3fb4c8 (patch) | |
| tree | b2cebcf1f6b6073eeeb0595710d6fdf05fcb06fb /src/fmt.cff | |
| parent | b3159bfd93c8bdce71f7437abdc521b5ccb72367 (diff) | |
stuff
Diffstat (limited to 'src/fmt.cff')
| -rw-r--r-- | src/fmt.cff | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/fmt.cff b/src/fmt.cff index 90b6423..53eeb56 100644 --- a/src/fmt.cff +++ b/src/fmt.cff @@ -155,7 +155,7 @@ extern fn vpfmt(proc *fn(u8, *void) void, parg *void, fmt *const u8, ap va_list) case Fn f; ps("fn ("); foreach(ty, i, f.params, - pritype(proc, parg, ty); + pfmt(proc, parg, "%t", ty); if f.variadic or i < f.params.#len - 1 { ps(", "); } @@ -238,7 +238,9 @@ extern fn vpfmt(proc *fn(u8, *void) void, parg *void, fmt *const u8, ap va_list) let tokt = ap->arg(TokT); pritokt(proc, parg, tokt); case 't'; + ps("\e[1m"); pritype(proc, parg, ap->arg(*const Type)); + ps("\e[0m"); case else assert(#f, "bad fmt '%c'", c); } @@ -293,13 +295,13 @@ fn eprifileline(loc Loc) void { } } fseek(fp, line_begin, SEEK_SET); - fprintf(stderr, "%4d | ", loc.line); - for let c u8 = fgetc(fp); c != EOF and c != '\n'; c = fgetc(fp) { + let ln = fprintf(stderr, "%4d | ", loc.line); + for let c = fgetc(fp); c != EOF and c != '\n'; c = fgetc(fp) { fputc(c, stderr); } fputc('\n', stderr); fclose(fp); - for let i = 0; i < loc.col; ++i { + for let i = 0; i < ln + (loc.col - 1); ++i { fputc(' ', stderr); } fprintf(stderr, "^\n"); @@ -312,7 +314,7 @@ extern fn vdiag(P *Parser, loc Loc, kind *const u8, fmt *const u8, ap va_list) v eprifileline(loc); } -extern fn fatal(P *Parser, loc Loc, fmt *const u8, ...) void { +extern fn err(P *Parser, loc Loc, fmt *const u8, ...) void { let ap va_list #?; ap->start(fmt); vdiag(P, loc, "error", fmt, ap); @@ -320,3 +322,11 @@ extern fn fatal(P *Parser, loc Loc, fmt *const u8, ...) void { exit(1); } +extern fn fatal(P *Parser, loc Loc, fmt *const u8, ...) void { + let ap va_list #?; + ap->start(fmt); + vdiag(P, loc, "error", fmt, ap); + ap->end(); + efmt("Aborting due to previous error.\n"); + exit(1); +} |