aboutsummaryrefslogtreecommitdiff
path: root/src/fmt.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-16 05:28:18 +0200
committerlemon <lsof@mailbox.org>2022-08-16 05:28:18 +0200
commit73f68a9c5ed4c8139cc1c4f7695da29e5a3fb4c8 (patch)
treeb2cebcf1f6b6073eeeb0595710d6fdf05fcb06fb /src/fmt.cff
parentb3159bfd93c8bdce71f7437abdc521b5ccb72367 (diff)
stuff
Diffstat (limited to 'src/fmt.cff')
-rw-r--r--src/fmt.cff20
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);
+}