mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-06 06:58:45 +00:00
build_visitor fixed, going to test it
This commit is contained in:
parent
5bf0c1bf48
commit
c34523bd4f
23 changed files with 45468 additions and 45273 deletions
|
|
@ -262,6 +262,16 @@ void PrintVisitor::Visit(AnyAnnotatedType* node) {
|
|||
|
||||
// Flow control -----------------
|
||||
|
||||
void PrintVisitor::Visit(TypeConstructorPatternParameter* node) {
|
||||
out_ << "[TypeConstructorPatternParameter ";
|
||||
if (node->name.has_value()) {
|
||||
Visit(&node->name.value());
|
||||
out_ << " = ";
|
||||
}
|
||||
Visitor::Visit(node->value);
|
||||
out_ << "]";
|
||||
}
|
||||
|
||||
void PrintVisitor::Visit(TypeConstructorPattern* node) {
|
||||
out_ << "[TypeConstructorPattern ";
|
||||
Visit(&node->constructor);
|
||||
|
|
@ -274,11 +284,7 @@ void PrintVisitor::Visit(TypeConstructorPattern* node) {
|
|||
is_first = false;
|
||||
}
|
||||
out_ << '(';
|
||||
if (parameter.first.has_value()) {
|
||||
Visit(¶meter.first.value());
|
||||
out_ << " = ";
|
||||
}
|
||||
Visitor::Visit(parameter.second);
|
||||
Visit(¶meter);
|
||||
}
|
||||
out_ << ")\n";
|
||||
}
|
||||
|
|
@ -434,18 +440,20 @@ void PrintVisitor::Visit(AccessExpression* node) {
|
|||
// Other Expressions
|
||||
|
||||
void PrintVisitor::Visit(FunctionCallExpression* node) {
|
||||
out_ << "[FunctionCall (";
|
||||
out_ << "[FunctionCall ";
|
||||
|
||||
if (std::holds_alternative<std::unique_ptr<SubExpressionToken>>(node->prefix)) {
|
||||
Visitor::Visit(*std::get<std::unique_ptr<SubExpressionToken>>(node->prefix));
|
||||
} else if (std::holds_alternative<std::unique_ptr<TypeExpression>>(node->prefix)) {
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node->prefix).get());
|
||||
} else {
|
||||
// error
|
||||
if (node->prefix.has_value()) {
|
||||
out_ << '(';
|
||||
if (std::holds_alternative<std::unique_ptr<SubExpressionToken>>(node->prefix.value())) {
|
||||
Visitor::Visit(*std::get<std::unique_ptr<SubExpressionToken>>(node->prefix.value()));
|
||||
} else if (std::holds_alternative<std::unique_ptr<TypeExpression>>(node->prefix.value())) {
|
||||
Visit(std::get<std::unique_ptr<TypeExpression>>(node->prefix.value()).get());
|
||||
} else {
|
||||
// error
|
||||
}
|
||||
out_ << ").";
|
||||
}
|
||||
|
||||
out_ << ").";
|
||||
|
||||
Visit(&node->name);
|
||||
|
||||
out_ << "] (";
|
||||
|
|
@ -480,6 +488,23 @@ void PrintVisitor::Visit(ReturnExpression* node) {
|
|||
out_ << ")\n";
|
||||
}
|
||||
|
||||
void PrintVisitor::Visit(TypeConstructorParameter* node) {
|
||||
out_ << "[TypeConstructorParameter ";
|
||||
if (node->name.has_value()) {
|
||||
Visit(&node->name.value());
|
||||
switch (node->asignment_modifier.value()) {
|
||||
case TypeConstructorParameter::Assign:
|
||||
out_ << " = ";
|
||||
break;
|
||||
case TypeConstructorParameter::Move:
|
||||
out_ << " <- ";
|
||||
break;
|
||||
}
|
||||
}
|
||||
Visitor::Visit(node->value);
|
||||
out_ << "]";
|
||||
}
|
||||
|
||||
void PrintVisitor::Visit(TypeConstructor* node) {
|
||||
out_ << "[TypeConstructor ";
|
||||
Visit(node->constructor.get());
|
||||
|
|
@ -492,18 +517,7 @@ void PrintVisitor::Visit(TypeConstructor* node) {
|
|||
is_first = false;
|
||||
}
|
||||
out_ << '(';
|
||||
if (parameter.first.has_value()) {
|
||||
Visit(¶meter.first.value().first);
|
||||
switch (parameter.first.value().second) {
|
||||
case TypeConstructor::Assign:
|
||||
out_ << " = ";
|
||||
break;
|
||||
case TypeConstructor::Move:
|
||||
out_ << " <- ";
|
||||
break;
|
||||
}
|
||||
}
|
||||
Visitor::Visit(parameter.second);
|
||||
Visit(¶meter);
|
||||
}
|
||||
out_ << ")\n";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue