visitor base fixes & print visitor fix started

This commit is contained in:
ProgramSnail 2023-04-25 14:59:14 +03:00
parent c6c2a00e04
commit fd047bc517
3 changed files with 28 additions and 3 deletions

View file

@ -41,6 +41,7 @@ private:
// Flow control ----------------- // Flow control -----------------
void Visit(TypeConstructorPattern* node) override;
void Visit(MatchCase* node) override; void Visit(MatchCase* node) override;
void Visit(Match* node) override; void Visit(Match* node) override;
void Visit(Condition* node) override; void Visit(Condition* node) override;
@ -89,15 +90,18 @@ private:
void Visit(FunctionType* node) override; void Visit(FunctionType* node) override;
void Visit(TupleType* node) override; void Visit(TupleType* node) override;
void Visit(VariantType* node) override; void Visit(VariantType* node) override;
void Visit(ParametrizedType* node) override;
void Visit(TypeExpression* node) override; void Visit(TypeExpression* node) override;
void Visit(ExtendedScopedAnyType* node) override; void Visit(ExtendedScopedAnyType* node) override;
// Typeclass // Typeclass
void Visit(ParametrizedTypeclass* node) override;
void Visit(TypeclassExpression* node) override; void Visit(TypeclassExpression* node) override;
void Visit(ParametrizedTypeclass* node) override;
// Typeclass & Type
void Visit(ParametrizedType* node) override;
// Identifiers, constants, etc. ----------------- // Identifiers, constants, etc. -----------------

View file

@ -253,7 +253,7 @@ void PrintVisitor::Visit(AnyAnnotatedType* node) {
if (!node->typeclasses.empty()) { if (!node->typeclasses.empty()) {
out_ << " ("; out_ << " (";
for (auto& typeclass : node->typeclasses) { for (auto& typeclass : node->typeclasses) {
Visitor::Visit(typeclass); Visit(typeclass.get());
} }
out_ << ')'; out_ << ')';
} }
@ -276,6 +276,20 @@ void PrintVisitor::Visit(MatchCase* node) {
out_ << "]\n"; out_ << "]\n";
} }
void PrintVisitor::Visit(MatchCase* node) {
out_ << "[MatchCase | ";
Visitor::Visit(node->value);
if (node->condition.has_value()) {
out_ << " ? ";
Visitor::Visit(node->condition.value());
}
if (node->statement.has_value()) {
out_ << " -> ";
Visitor::Visit(node->statement.value());
}
out_ << "]\n";
}
void PrintVisitor::Visit(Match* node) { void PrintVisitor::Visit(Match* node) {
out_ << "[Match] ("; out_ << "[Match] (";
Visitor::Visit(node->value); Visitor::Visit(node->value);

View file

@ -449,6 +449,13 @@ void Visitor::Visit(AnyAnnotatedType* node) {
// Flow control ----------------- // Flow control -----------------
void Visitor::Visit(TypeConstructorPattern* node) { void Visitor::Visit(TypeConstructorPattern* node) {
Visit(&node->constructor);
for (auto& parameter : node->parameters) {
if (parameter.first.has_value()) {
Visit(&parameter.first.value());
}
Visit(parameter.second);
}
} }
void Visitor::Visit(MatchCase* node) { void Visitor::Visit(MatchCase* node) {