mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-09 16:38:45 +00:00
reference fixes, fizes
This commit is contained in:
parent
8a84cfff70
commit
a9d4d3a104
8 changed files with 43 additions and 48 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue