1
0
mirror of synced 2024-11-28 17:40:51 +01:00

patterns: Fixed function parameters being set in the wrong order

This commit is contained in:
WerWolv 2021-09-24 11:34:06 +02:00
parent c8114347dc
commit 93c1fbd65e
2 changed files with 7 additions and 6 deletions

View File

@ -1777,7 +1777,7 @@ namespace hex::pl {
class ASTNodeFunctionDefinition : public ASTNode {
public:
// TODO: Implement this
ASTNodeFunctionDefinition(std::string name, std::map<std::string, ASTNode*> params, std::vector<ASTNode*> body)
ASTNodeFunctionDefinition(std::string name, std::vector<std::pair<std::string, ASTNode*>> params, std::vector<ASTNode*> body)
: m_name(std::move(name)), m_params(std::move(params)), m_body(std::move(body)) {
}
@ -1787,7 +1787,7 @@ namespace hex::pl {
this->m_params = other.m_params;
for (const auto &[name, type] : other.m_params) {
this->m_params.emplace(name, type->clone());
this->m_params.emplace_back(name, type->clone());
}
for (auto statement : other.m_body) {
@ -1828,6 +1828,7 @@ namespace hex::pl {
u32 paramIndex = 0;
for (const auto &[name, type] : this->m_params) {
hex::log::info("{}", name);
ctx->createVariable(name, type, params[paramIndex]);
ctx->setVariable(name, params[paramIndex]);
@ -1851,7 +1852,7 @@ namespace hex::pl {
private:
std::string m_name;
std::map<std::string, ASTNode*> m_params;
std::vector<std::pair<std::string, ASTNode*>> m_params;
std::vector<ASTNode*> m_body;
};

View File

@ -424,7 +424,7 @@ namespace hex::pl {
ASTNode* Parser::parseFunctionDefinition() {
const auto &functionName = getValue<Token::Identifier>(-2).get();
std::map<std::string, ASTNode*> params;
std::vector<std::pair<std::string, ASTNode*>> params;
// Parse parameter list
bool hasParams = !peek(SEPARATOR_ROUNDBRACKETCLOSE);
@ -433,9 +433,9 @@ namespace hex::pl {
auto type = parseType(true);
if (MATCHES(sequence(IDENTIFIER)))
params.emplace(getValue<Token::Identifier>(-1).get(), type);
params.emplace_back(getValue<Token::Identifier>(-1).get(), type);
else {
params.emplace(std::to_string(unnamedParamCount), type);
params.emplace_back(std::to_string(unnamedParamCount), type);
unnamedParamCount++;
}