Continue parsing paramslist until we've found the closing parenthesis

This commit is contained in:
Deukhoofd 2020-10-10 18:35:31 +02:00
parent ad8a0ce1b4
commit a7c7fc3e28
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
2 changed files with 14 additions and 2 deletions

View File

@ -353,8 +353,14 @@ namespace MalachScript::Parser {
}
PROGRESS_TOKEN(currentToken);
}
if (currentToken->GetKind() != LexTokenKind::CloseParenthesisSymbol) {
while (currentToken->GetKind() != LexTokenKind::CloseParenthesisSymbol) {
LogError(Diagnostics::DiagnosticType::UnexpectedToken, currentToken->GetSpan());
if (currentToken->GetKind() == LexTokenKind::EndOfFile) {
break;
}
if (currentToken->GetKind() == LexTokenKind::SemicolonSymbol) {
break;
}
}
out = new ParsedParamListStatement(TextSpan(start, currentToken->GetSpan().GetEnd()), parameters);
PROGRESS_TOKEN(currentToken);

View File

@ -25,4 +25,10 @@ PARSE_TEST("Parse class with empty definition", "class foobar {}", {
REQUIRE(diags.GetMessages().empty());
REQUIRE(script->GetStatements().size() == 1);
REQUIRE(script->GetStatements()[0].get()->GetKind() == Parser::ParsedStatementKind::Class);
})
})
PARSE_TEST("Parse function without definition", "void foobar(int8 par1, bool &in x);", {
REQUIRE(diags.GetMessages().empty());
REQUIRE(script->GetStatements().size() == 1);
REQUIRE(script->GetStatements()[0].get()->GetKind() == Parser::ParsedStatementKind::Func);
})