Improve behavior of parser when failing on a BlockStart

This commit is contained in:
Sam Vervaeck 2023-05-27 18:51:12 +02:00
parent 39d576c799
commit 8e4fae2228
Signed by: samvv
SSH key fingerprint: SHA256:dIg0ywU1OP+ZYifrYxy8c5esO72cIKB+4/9wkZj1VaY

View file

@ -94,7 +94,7 @@ namespace bolt {
Tokens.get(); Tokens.get();
return new BindPattern(static_cast<Identifier*>(T0)); return new BindPattern(static_cast<Identifier*>(T0));
default: default:
Tokens.get(); // Tokens.get();
DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::Identifier, NodeKind::StringLiteral, NodeKind::IntegerLiteral }); DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::Identifier, NodeKind::StringLiteral, NodeKind::IntegerLiteral });
return nullptr; return nullptr;
} }
@ -244,7 +244,7 @@ after_tuple_element:
case NodeKind::IdentifierAlt: case NodeKind::IdentifierAlt:
return parseReferenceTypeExpression(); return parseReferenceTypeExpression();
default: default:
Tokens.get(); // Tokens.get();
DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::Identifier, NodeKind::IdentifierAlt, NodeKind::LParen }); DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::Identifier, NodeKind::IdentifierAlt, NodeKind::LParen });
return nullptr; return nullptr;
} }
@ -464,7 +464,7 @@ after_tuple_elements:
Tokens.get(); Tokens.get();
return new ConstantExpression(static_cast<Literal*>(T0)); return new ConstantExpression(static_cast<Literal*>(T0));
default: default:
Tokens.get(); // Tokens.get();
DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::MatchKeyword, NodeKind::Identifier, NodeKind::IdentifierAlt, NodeKind::LParen, NodeKind::IntegerLiteral, NodeKind::StringLiteral }); DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::MatchKeyword, NodeKind::Identifier, NodeKind::IdentifierAlt, NodeKind::LParen, NodeKind::IntegerLiteral, NodeKind::StringLiteral });
return nullptr; return nullptr;
} }
@ -1202,8 +1202,10 @@ after_vars:
} }
void Parser::checkLineFoldEnd() { void Parser::checkLineFoldEnd() {
auto T0 = Tokens.get(); auto T0 = Tokens.peek();
if (T0->getKind() != NodeKind::LineFoldEnd) { if (T0->getKind() == NodeKind::LineFoldEnd) {
Tokens.get();
} else {
DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::LineFoldEnd }); DE.add<UnexpectedTokenDiagnostic>(File, T0, std::vector { NodeKind::LineFoldEnd });
skipToLineFoldEnd(); skipToLineFoldEnd();
} }