diff --git a/include/print_visitor.hpp b/include/print_visitor.hpp index 58442bd..1c0c1a0 100644 --- a/include/print_visitor.hpp +++ b/include/print_visitor.hpp @@ -41,6 +41,7 @@ private: // Flow control ----------------- + void Visit(TypeConstructorPattern* node) override; void Visit(MatchCase* node) override; void Visit(Match* node) override; void Visit(Condition* node) override; @@ -89,15 +90,18 @@ private: void Visit(FunctionType* node) override; void Visit(TupleType* node) override; void Visit(VariantType* node) override; - void Visit(ParametrizedType* node) override; void Visit(TypeExpression* node) override; void Visit(ExtendedScopedAnyType* node) override; // Typeclass - void Visit(ParametrizedTypeclass* node) override; void Visit(TypeclassExpression* node) override; + void Visit(ParametrizedTypeclass* node) override; + + // Typeclass & Type + + void Visit(ParametrizedType* node) override; // Identifiers, constants, etc. ----------------- diff --git a/src/print_visitor.cpp b/src/print_visitor.cpp index 51b9d42..e648c48 100644 --- a/src/print_visitor.cpp +++ b/src/print_visitor.cpp @@ -253,7 +253,7 @@ void PrintVisitor::Visit(AnyAnnotatedType* node) { if (!node->typeclasses.empty()) { out_ << " ("; for (auto& typeclass : node->typeclasses) { - Visitor::Visit(typeclass); + Visit(typeclass.get()); } out_ << ')'; } @@ -276,6 +276,20 @@ void PrintVisitor::Visit(MatchCase* node) { 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) { out_ << "[Match] ("; Visitor::Visit(node->value); diff --git a/src/visitor.cpp b/src/visitor.cpp index ec78f75..772b6c9 100644 --- a/src/visitor.cpp +++ b/src/visitor.cpp @@ -449,6 +449,13 @@ void Visitor::Visit(AnyAnnotatedType* node) { // Flow control ----------------- void Visitor::Visit(TypeConstructorPattern* node) { + Visit(&node->constructor); + for (auto& parameter : node->parameters) { + if (parameter.first.has_value()) { + Visit(¶meter.first.value()); + } + Visit(parameter.second); + } } void Visitor::Visit(MatchCase* node) {