mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-10 08:58:45 +00:00
optional variable deffinition added, annotations removed
This commit is contained in:
parent
7ce8513ad0
commit
de7c1e062f
20 changed files with 178 additions and 57 deletions
|
|
@ -1202,6 +1202,17 @@ void BuildVisitor::Visit(NameExpression* node) {
|
|||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(OptionalName* node) {
|
||||
SetPosition(node->base, current_node_);
|
||||
|
||||
auto parse_node = current_node_;
|
||||
|
||||
current_node_ = parse_node.ChildByFieldName("name");
|
||||
Visit(node->name);
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(TupleName* node) {
|
||||
SetPosition(node->base, current_node_);
|
||||
|
||||
|
|
@ -1213,7 +1224,7 @@ void BuildVisitor::Visit(TupleName* node) {
|
|||
|
||||
for (size_t i = 0; i < names_count; ++i) {
|
||||
current_node_ = parse_node.NthNamedChild(i);
|
||||
node->names[i] = std::make_unique<AnnotatedName>();
|
||||
node->names[i] = std::make_unique<Name>();
|
||||
Visit(node->names[i]);
|
||||
}
|
||||
|
||||
|
|
@ -1231,27 +1242,21 @@ void BuildVisitor::Visit(VariantName* node) {
|
|||
|
||||
for (size_t i = 0; i < names_count; ++i) {
|
||||
current_node_ = parse_node.NthNamedChild(i);
|
||||
node->names[i] =std::make_unique<AnnotatedName>();
|
||||
node->names[i] =std::make_unique<Name>();
|
||||
Visit(node->names[i]);
|
||||
}
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(AnnotatedName* node) {
|
||||
void BuildVisitor::Visit(Name* node) {
|
||||
SetPosition(node->base, current_node_);
|
||||
|
||||
auto parse_node = current_node_;
|
||||
|
||||
node->name = parse_node.ChildByFieldName("name").GetValue();
|
||||
|
||||
if (parse_node.NamedChildCount() > 1) {
|
||||
current_node_ = parse_node.ChildByFieldName("type");
|
||||
node->type.emplace();
|
||||
Visit(node->type.value());
|
||||
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(AnyName& node) {
|
||||
|
|
@ -1261,9 +1266,12 @@ void BuildVisitor::Visit(AnyName& node) {
|
|||
|
||||
std::string current_node_type = current_node_.GetType();
|
||||
|
||||
if (current_node_type == parser::tokens::AnnotatedName) {
|
||||
node = std::make_unique<AnnotatedName>();
|
||||
Visit(std::get<std::unique_ptr<AnnotatedName>>(node).get());
|
||||
if (current_node_type == parser::tokens::Name) {
|
||||
node = std::make_unique<Name>();
|
||||
Visit(std::get<std::unique_ptr<Name>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::OptionalName) {
|
||||
node = std::make_unique<OptionalName>();
|
||||
Visit(std::get<std::unique_ptr<OptionalName>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::TupleName) {
|
||||
node = std::make_unique<TupleName>();
|
||||
Visit(std::get<std::unique_ptr<TupleName>>(node).get());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue