reference fixes, fizes

This commit is contained in:
ProgramSnail 2023-05-21 10:57:08 +03:00
parent 8a84cfff70
commit a9d4d3a104
8 changed files with 43 additions and 48 deletions

View file

@ -749,6 +749,9 @@ void BuildVisitor::Visit(SubExpressionToken& node) {
} else if (current_node_type == parser::tokens::Literal) {
node = std::make_unique<Literal>();
Visit(*std::get<std::unique_ptr<Literal>>(node));
} else if (current_node_type == parser::tokens::ReferenceExpression) {
node = std::make_unique<ReferenceExpression>();
Visit(std::get<std::unique_ptr<ReferenceExpression>>(node).get());
} else {
// error
}
@ -772,9 +775,6 @@ void BuildVisitor::Visit(SubExpression& node) {
} else if (current_node_type == parser::tokens::SubExpressionToken) {
node = std::make_unique<SubExpressionToken>();
Visit(*std::get<std::unique_ptr<SubExpressionToken>>(node));
} else if (current_node_type == parser::tokens::ReferenceExpression) {
node = std::make_unique<ReferenceExpression>();
Visit(std::get<std::unique_ptr<ReferenceExpression>>(node).get());
} else {
// error
}
@ -919,16 +919,15 @@ void BuildVisitor::Visit(ReferenceExpression* node) {
size_t child_count = parse_node.ChildCount();
if (child_count > 1) {
node->references.resize(child_count - 1);
for (size_t i = 0; i + 1 < child_count; ++i) {
std::string reference = parse_node.NthChild(i).GetValue();
if (reference == "^") {
node->references[i] = utils::ReferenceModifier::Reference;
} else if (reference == "~") {
node->references[i] = utils::ReferenceModifier::Dereference;
} else if (reference == "@") {
node->references[i] = utils::ReferenceModifier::UniqueReference; // TODO: rename to move ??
}
std::string reference_name = parse_node.NthChild(0).GetValue();
if (reference_name == "^") {
node->reference = utils::ReferenceModifier::Reference;
} else if (reference_name == "~") {
node->reference = utils::ReferenceModifier::Dereference;
} else if (reference_name == "@") {
node->reference = utils::ReferenceModifier::UniqueReference; // TODO: rename to move ??
} else {
// error
}
}