mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-07 15:38:47 +00:00
part of find_symbols_visitor done
This commit is contained in:
parent
f88a23194f
commit
18e85f794f
6 changed files with 827 additions and 57 deletions
|
|
@ -24,7 +24,7 @@ void BuildVisitor::Visit(SourceFile* node) {
|
|||
Visit(std::get<SourceStatement>(node->statements[i]));
|
||||
} else if (current_node_type == parser::tokens::Partition) {
|
||||
node->statements[i].emplace<Partition>();
|
||||
Visit(&std::get<Partition>(node->statements[i]));
|
||||
Visit(&std::get<Partition>(node->statements[i]) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1174,27 +1174,27 @@ void BuildVisitor::Visit(AnyName& node) {
|
|||
// Type
|
||||
|
||||
void BuildVisitor::Visit(TypeConstructor* node) {
|
||||
auto parse_node = current_node_;
|
||||
|
||||
current_node_ = parse_node.ChildByFieldName("type");
|
||||
node->type = std::make_unique<ParametrizedType>();
|
||||
Visit(node->type.get());
|
||||
|
||||
size_t parameter_count = (parse_node.NamedChildCount() - 1) / 2;
|
||||
|
||||
node->parameters.resize(parameter_count);
|
||||
|
||||
for (size_t i = 0; i < parameter_count * 2; ++i) {
|
||||
current_node_ = parse_node.NthNamedChild(i + 1);
|
||||
|
||||
if (i % 2 == 0) {
|
||||
node->parameters[i / 2].first = current_node_.GetValue();
|
||||
} else {
|
||||
Visit(node->parameters[i / 2].second);
|
||||
}
|
||||
}
|
||||
|
||||
current_node_ = parse_node;
|
||||
// auto parse_node = current_node_;
|
||||
//
|
||||
// current_node_ = parse_node.ChildByFieldName("type");
|
||||
// node->type = std::make_unique<ParametrizedType>();
|
||||
// Visit(node->type.get());
|
||||
//
|
||||
// size_t parameter_count = (parse_node.NamedChildCount() - 1) / 2;
|
||||
//
|
||||
// node->parameters.resize(parameter_count);
|
||||
//
|
||||
// for (size_t i = 0; i < parameter_count * 2; ++i) {
|
||||
// current_node_ = parse_node.NthNamedChild(i + 1);
|
||||
//
|
||||
// if (i % 2 == 0) {
|
||||
// node->parameters[i / 2].first = current_node_.GetValue();
|
||||
// } else {
|
||||
// Visit(node->parameters[i / 2].second);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// current_node_ = parse_node;
|
||||
}
|
||||
|
||||
void BuildVisitor::Visit(TupleType* node) {
|
||||
|
|
@ -1538,8 +1538,8 @@ void BuildVisitor::Visit(NameSubSuperExpression& node) {
|
|||
std::string current_node_type = current_node_.GetType();
|
||||
|
||||
if (current_node_type == parser::tokens::NameIdentifier) { // optimize ??
|
||||
// TODO: choose : node = std::make_unique<NameIdentifier>(current_node_.GetValue());
|
||||
Visit(std::get<std::unique_ptr<NameIdentifier>>(node).get());
|
||||
node = std::make_unique<NameIdentifier>(current_node_.GetValue());
|
||||
//Visit(std::get<std::unique_ptr<NameIdentifier>>(node).get());
|
||||
} else if (current_node_type == parser::tokens::Literal) {
|
||||
node = std::make_unique<Literal>();
|
||||
Visit(*std::get<std::unique_ptr<Literal>>(node));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue