visitor, print_visitor and build_visitor fixed

This commit is contained in:
ProgramSnail 2023-04-29 13:44:34 +03:00
parent 776b6cccc6
commit 4d0b527416
9 changed files with 212 additions and 139 deletions

View file

@ -8,27 +8,21 @@ namespace interpreter {
void PrintVisitor::Visit(SourceFile* node) {
out_ << "[SourceFile] (\n\n";
for (auto& statement : node->statements) {
if (std::holds_alternative<Partition>(statement)) {
Visit(&std::get<Partition>(statement));
} else if (std::holds_alternative<SourceStatement>(statement)) {
Visitor::Visit(std::get<SourceStatement>(statement));
} else {
// error
}
Visitor::Visit(statement);
}
out_ << "\n)\n";
}
void PrintVisitor::Visit(Sources* node) {
out_ << "[Sources](\n";
// Namespaces, partitions -----------------
void PrintVisitor::Visit(PartitionSources* node) {
out_ << "[PartitionSources](\n";
for (auto& statement : node->statements) {
Visitor::Visit(statement);
}
out_ << ")\n";
}
// Namespaces, partitions -----------------
void PrintVisitor::Visit(Partition* node) {
out_ << "[Partition] ";
switch (node->name) {
@ -43,10 +37,18 @@ void PrintVisitor::Visit(Partition* node) {
break;
}
out_ << " {\n";
Visit(node->scope.get());
Visit(&node->scope);
out_ << "}\n";
}
void PrintVisitor::Visit(NamespaceSources* node) {
out_ << "[NamespaceSources](\n";
for (auto& statement : node->statements) {
Visitor::Visit(statement);
}
out_ << ")\n";
}
void PrintVisitor::Visit(Namespace* node) {
out_ << "[Namespace] ";
if (node->modifier.has_value()) {
@ -61,7 +63,7 @@ void PrintVisitor::Visit(Namespace* node) {
}
Visit(&node->type);
out_ << "{\n";
Visit(node->scope.get());
Visit(&node->scope);
out_ << "}\n";
}
@ -658,10 +660,6 @@ void PrintVisitor::Visit(ExtendedScopedAnyType* node) {
void PrintVisitor::Visit(TypeclassExpression* node) {
out_ << "[TypeclassExpression] (";
for (auto& type : node->path) {
Visitor::Visit(type);
out_ << "::";
}
Visitor::Visit(node->typeclass);
out_ << ')';
}