Enhance 'but got x' output on parse error

This commit is contained in:
Sam Vervaeck 2023-05-26 23:48:58 +02:00
parent 91c4b75bc1
commit bed5d3cbc4
Signed by: samvv
SSH key fingerprint: SHA256:dIg0ywU1OP+ZYifrYxy8c5esO72cIKB+4/9wkZj1VaY

View file

@ -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) { std::string describe(const Type* Ty) {
switch (Ty->getKind()) { switch (Ty->getKind()) {
case TypeKind::Var: case TypeKind::Var:
@ -480,9 +492,9 @@ namespace bolt {
write(describe(Prev)); write(describe(Prev));
break; break;
} }
write(" but instead got '"); write(" but instead got ");
write(E.Actual->getText()); write(describe(E.Actual));
write("'\n\n"); write("\n\n");
writeExcerpt(E.File, E.Actual->getRange(), E.Actual->getRange(), Color::Red); writeExcerpt(E.File, E.Actual->getRange(), E.Actual->getRange(), Color::Red);
write("\n"); write("\n");
break; break;