mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-06 06:58:45 +00:00
visitor base fixes & print visitor fix started
This commit is contained in:
parent
c6c2a00e04
commit
fd047bc517
3 changed files with 28 additions and 3 deletions
|
|
@ -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. -----------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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(¶meter.first.value());
|
||||||
|
}
|
||||||
|
Visit(parameter.second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Visitor::Visit(MatchCase* node) {
|
void Visitor::Visit(MatchCase* node) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue