patterns: Added default parameters

This commit is contained in:
WerWolv
2022-03-24 20:31:45 +01:00
parent a16e387dff
commit 368c943040
12 changed files with 181 additions and 99 deletions

View File

@@ -406,6 +406,8 @@ namespace hex::pl {
// Parse parameter list
bool hasParams = !peek(SEPARATOR_ROUNDBRACKETCLOSE);
u32 unnamedParamCount = 0;
std::vector<std::unique_ptr<ASTNode>> defaultParameters;
while (hasParams) {
if (MATCHES(sequence(VALUETYPE_AUTO, SEPARATOR_DOT, SEPARATOR_DOT, SEPARATOR_DOT, IDENTIFIER))) {
parameterPack = getValue<Token::Identifier>(-1).get();
@@ -424,6 +426,14 @@ namespace hex::pl {
unnamedParamCount++;
}
if (MATCHES(sequence(OPERATOR_ASSIGNMENT))) {
// Parse default parameters
defaultParameters.push_back(parseMathematicalExpression());
} else {
if (!defaultParameters.empty())
throwParserError(hex::format("default argument missing for parameter {}", params.size()));
}
if (!MATCHES(sequence(SEPARATOR_COMMA))) {
break;
}
@@ -444,7 +454,7 @@ namespace hex::pl {
body.push_back(this->parseFunctionStatement());
}
return create(new ASTNodeFunctionDefinition(getNamespacePrefixedName(functionName), std::move(params), std::move(body), parameterPack));
return create(new ASTNodeFunctionDefinition(getNamespacePrefixedName(functionName), std::move(params), std::move(body), parameterPack, std::move(defaultParameters)));
}
std::unique_ptr<ASTNode> Parser::parseFunctionVariableDecl() {