constructors on heap, consuming match, move modifier in reference expression, .bring. keyword to return from block, some fixes

This commit is contained in:
ProgramSnail 2023-05-20 20:18:49 +03:00
parent 2556efcaba
commit 8a84cfff70
12 changed files with 128 additions and 34 deletions

View file

@ -551,6 +551,8 @@ void BuildVisitor::Visit(Match* node) {
auto parse_node = current_node_;
node->is_consuming_value = (parse_node.NthChild(1).GetValue() == "<-");
current_node_ = parse_node.ChildByFieldName("value");
Visit(node->value);
@ -924,6 +926,8 @@ void BuildVisitor::Visit(ReferenceExpression* node) {
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 ??
}
}
}
@ -1042,6 +1046,8 @@ void BuildVisitor::Visit(ReturnExpression* node) {
auto parse_node = current_node_;
node->is_from_definition = (parse_node.NthChild(0).GetValue() == "return"); // "return" to return from definition and "bring" to return from block
current_node_ = parse_node.ChildByFieldName("expression");
Visit(node->expression);
@ -1077,6 +1083,8 @@ void BuildVisitor::Visit(TypeConstructor* node) {
auto parse_node = current_node_;
node->is_allocated_on_heap = (parse_node.NthChild(1).GetValue() == "@");
current_node_ = parse_node.ChildByFieldName("constructor");
node->constructor = std::make_unique<TypeExpression>();
Visit(node->constructor.get());