mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-09 00:18:44 +00:00
constructors on heap, consuming match, move modifier in reference expression, .bring. keyword to return from block, some fixes
This commit is contained in:
parent
2556efcaba
commit
8a84cfff70
12 changed files with 128 additions and 34 deletions
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue