From bed5d3cbc4a0690b7d2fa36693d023b6eeafbfb3 Mon Sep 17 00:00:00 2001 From: Sam Vervaeck Date: Fri, 26 May 2023 23:48:58 +0200 Subject: [PATCH] Enhance 'but got x' output on parse error --- src/Diagnostics.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Diagnostics.cc b/src/Diagnostics.cc index 4d84d4411..72a5354cf 100644 --- a/src/Diagnostics.cc +++ b/src/Diagnostics.cc @@ -112,6 +112,18 @@ namespace bolt { } } + static std::string describe(Token* T) { + switch (T->getKind()) { + case NodeKind::LineFoldEnd: + case NodeKind::BlockStart: + case NodeKind::BlockEnd: + case NodeKind::EndOfFile: + return describe(T->getKind()); + default: + return "'" + T->getText() + "'"; + } + } + std::string describe(const Type* Ty) { switch (Ty->getKind()) { case TypeKind::Var: @@ -480,9 +492,9 @@ namespace bolt { write(describe(Prev)); break; } - write(" but instead got '"); - write(E.Actual->getText()); - write("'\n\n"); + write(" but instead got "); + write(describe(E.Actual)); + write("\n\n"); writeExcerpt(E.File, E.Actual->getRange(), E.Actual->getRange(), Color::Red); write("\n"); break;