diff options
| author | 2022-08-18 17:39:25 +0200 | |
|---|---|---|
| committer | 2022-08-18 17:39:25 +0200 | |
| commit | 9c485da5e1d955031fa2a3654bfc2ef814898167 (patch) | |
| tree | 44e841ced0479d5ec82cca28733413784eedf52c /src/fmt.cff | |
| parent | f0214ff61b5a94b9629db6f43d7a5b010bd4ffbc (diff) | |
lots of goodnes
Diffstat (limited to 'src/fmt.cff')
| -rw-r--r-- | src/fmt.cff | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/fmt.cff b/src/fmt.cff index 0dce9d3..111809f 100644 --- a/src/fmt.cff +++ b/src/fmt.cff @@ -150,7 +150,11 @@ extern fn vpfmt(proc *fn(u8, *void) void, parg *void, fmt *const u8, ap va_list) case Ptr child; pfmt(proc, parg, "*%t", child); case Arr arr; - pfmt(proc, parg, "[%I]%t", arr.length, arr.child); + if arr.length < 0 { + pfmt(proc, parg, "[]%t", arr.child); + } else { + pfmt(proc, parg, "[%I]%t", arr.length, arr.child); + } case Slice child; pfmt(proc, parg, "[#]%t", child); case Fn f; @@ -169,6 +173,13 @@ extern fn vpfmt(proc *fn(u8, *void) void, parg *void, fmt *const u8, ap va_list) if agg.name { ps(agg.name); } else { + ps("(anonymous)"); + } + case Enum e; + if e.name { + ps(e.name); + } else { + ps("(anonymous)"); } } } @@ -326,6 +337,17 @@ extern fn vdiag(P *Parser, loc Loc, kind *const u8, fmt *const u8, ap va_list) v vefmt(fmt, ap); efmt("\n"); eprifileline(loc); + let i = 0; + for let ep = P.curexpan; ep; ep = ep.prev { + if ep.name != #null and (i++ < 8 or ep.prev == #null or ep.prev.prev == #null) { + efmt("* while expanding %s `%s' at %l\n", + "macro", ep.name, ep.loc); + eprifileline(ep.loc); + } else if ep.name != #null and i == 8 { + efmt(" ... (some expansions omitted)\n"); + } + + } } extern fn warn(P *Parser, loc Loc, fmt *const u8, ...) void { |