aboutsummaryrefslogtreecommitdiff
path: root/src/fmt.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-17 05:18:22 +0200
committerlemon <lsof@mailbox.org>2022-08-17 05:18:22 +0200
commitc50a02ec703c7c1c5f6823c8cbd07a424d604792 (patch)
treeef80066da26b0b91c73fba6c6e3234ddc78d869c /src/fmt.cff
parent1ca77f60626666fba792db407dd11ea9b597d9cf (diff)
more exprs, warnings
Diffstat (limited to 'src/fmt.cff')
-rw-r--r--src/fmt.cff17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/fmt.cff b/src/fmt.cff
index 10508b9..37b6dc9 100644
--- a/src/fmt.cff
+++ b/src/fmt.cff
@@ -242,6 +242,9 @@ extern fn vpfmt(proc *fn(u8, *void) void, parg *void, fmt *const u8, ap va_list)
ps("\e[1m");
pritype(proc, parg, ap->arg(*const Type));
ps("\e[0m");
+ case 'l';
+ let loc = ap->arg(Loc);
+ pfmt(proc, parg, "\e[1m%s:%d:%d\e[0m", fileid2path(loc.fileid), loc.line, loc.col);
case else
assert(#f, "bad fmt '%c'", c);
}
@@ -309,24 +312,30 @@ fn eprifileline(loc Loc) void {
}
extern fn vdiag(P *Parser, loc Loc, kind *const u8, fmt *const u8, ap va_list) void {
- efmt("%s:%i:%i: %s: ", fileid2path(loc.fileid), loc.line, loc.col, kind);
+ efmt("\e[1m%s:%i:%i:\e[0m %s: ", fileid2path(loc.fileid), loc.line, loc.col, kind);
vefmt(fmt, ap);
efmt("\n");
eprifileline(loc);
}
+extern fn warn(P *Parser, loc Loc, fmt *const u8, ...) void {
+ let ap va_list #?;
+ ap->start(fmt);
+ vdiag(P, loc, "\e[33mwarning\e[0m", fmt, ap);
+ ap->end();
+}
+
extern fn err(P *Parser, loc Loc, fmt *const u8, ...) void {
let ap va_list #?;
ap->start(fmt);
- vdiag(P, loc, "error", fmt, ap);
+ vdiag(P, loc, "\e[31merror\e[0m", fmt, ap);
ap->end();
- 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);
+ vdiag(P, loc, "\e[31merror\e[0m", fmt, ap);
ap->end();
efmt("Aborting due to previous error.\n");
exit(1);