grammar refactoring: base visitor class fixed

This commit is contained in:
ProgramSnail 2023-04-09 14:13:47 +03:00
parent ff893d3ebd
commit 77c7ac0b2f
3 changed files with 112 additions and 155 deletions

View file

@ -11,30 +11,24 @@ void Visitor::Visit(SourceStatement& node) {
Visit(std::get<std::unique_ptr<ImportStatement>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<UsageDefinition>>(node).get());
Visit(std::get<std::unique_ptr<AliasDefinitionStatement>>(node).get());
break;
case 2:
Visit(std::get<std::unique_ptr<AliasDefinition>>(node).get());
break;
case 3:
Visit(std::get<std::unique_ptr<VariableDefinition>>(node).get());
break;
case 4:
Visit(std::get<std::unique_ptr<FunctionDeclaration>>(node).get());
break;
case 3:
Visit(std::get<std::unique_ptr<FunctionDefinitionStatement>>(node).get());
break;
case 4:
Visit(std::get<std::unique_ptr<TypeDefinitionStatement>>(node).get());
break;
case 5:
Visit(std::get<std::unique_ptr<FunctionDefinition>>(node).get());
Visit(std::get<std::unique_ptr<AbstractTypeDefinitionStatement>>(node).get());
break;
case 6:
Visit(std::get<std::unique_ptr<AliasTypeDefinition>>(node).get());
Visit(std::get<std::unique_ptr<TypeclassDefinitionStatement>>(node).get());
break;
case 7:
Visit(std::get<std::unique_ptr<TypeDefinition>>(node).get());
break;
case 8:
Visit(std::get<std::unique_ptr<TypeclassDefinition>>(node).get());
break;
case 9:
Visit(std::get<std::unique_ptr<Namespace>>(node).get());
break;
default:
@ -43,45 +37,6 @@ void Visitor::Visit(SourceStatement& node) {
}
}
void Visitor::Visit(ImportSymbol& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<TypeclassExpression>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
break;
case 2:
Visit(std::get<std::unique_ptr<NameExpression>>(node).get());
break;
default:
// error
break;
}
}
// Definition parts
void Visitor::Visit(FunctionDeclarationType& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<TupleType>>(node).get());
break;
case 2:
Visit(std::get<std::unique_ptr<VariantType>>(node).get());
break;
case 3:
Visit(std::get<std::unique_ptr<ParametrizedTypeclass>>(node).get());
break;
default:
// error
break;
}
}
// Flow control -----------------
void Visitor::Visit(FlowControl& node) {
@ -112,10 +67,32 @@ void Visitor::Visit(FlowControl& node) {
// Statements, expressions, blocks, etc. -----------------
void Visitor::Visit(BlockStatement& node) {
switch (node.index()) {
case 0:
Visit(*std::get<std::unique_ptr<Expression>>(node));
break;
case 1:
Visit(std::get<std::unique_ptr<VariableDefinitionStatement>>(node).get());
break;
case 2:
Visit(*std::get<std::unique_ptr<FlowControl>>(node));
break;
case 3:
Visit(*std::get<std::unique_ptr<PrefixedExpression>>(node));
break;
default:
// error
break;
}
}
//
void Visitor::Visit(SubExpressionToken& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<NameSuperExpression>>(node).get());
Visit(std::get<std::unique_ptr<NameExpression>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<ScopedStatement>>(node).get());
@ -137,6 +114,12 @@ void Visitor::Visit(SubExpression& node) {
case 2:
Visit(*std::get<std::unique_ptr<SubExpressionToken>>(node));
break;
case 3:
Visit(std::get<std::unique_ptr<ArrayExpression>>(node).get());
break;
case 4:
Visit(std::get<std::unique_ptr<ReferenceExpression>>(node).get());
break;
default:
// error
break;
@ -203,31 +186,6 @@ void Visitor::Visit(SuperExpression& node) {
}
}
//
void Visitor::Visit(BlockStatement& node) {
switch (node.index()) {
case 0:
Visit(*std::get<std::unique_ptr<Expression>>(node));
break;
case 1:
Visit(std::get<std::unique_ptr<AliasDefinition>>(node).get());
break;
case 2:
Visit(std::get<std::unique_ptr<VariableDefinition>>(node).get());
break;
case 3:
Visit(*std::get<std::unique_ptr<FlowControl>>(node));
break;
case 4:
Visit(*std::get<std::unique_ptr<PrefixedExpression>>(node));
break;
default:
// error
break;
}
}
// Simple Expressions
void Visitor::Visit(FunctionArgument& node) {
@ -263,6 +221,8 @@ void Visitor::Visit(AnyName& node) {
}
}
// Type, typeclass, etc. -----------------
// Type
void Visitor::Visit(AnyType& node) { // Or ScopedAnyType
@ -276,6 +236,41 @@ void Visitor::Visit(AnyType& node) { // Or ScopedAnyType
case 2:
Visit(std::get<std::unique_ptr<VariantType>>(node).get());
break;
case 3:
Visit(std::get<std::unique_ptr<FunctionType>>(node).get());
break;
default:
// error
break;
}
}
// Typeclass
void Visitor::Visit(TypeclassUsage& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<TypeclassExpression>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<ParametrizedTypeclass>>(node).get());
break;
default:
// error
break;
}
}
// Typeclass & Type
void Visitor::Visit(TypeParameter& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
break;
default:
// error
break;
@ -296,25 +291,6 @@ void Visitor::Visit(TypeSubExpression& node) {
}
}
//
void Visitor::Visit(TypeParameter& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<TypeExpression>>(node).get());
break;
case 1:
Visit(std::get<std::unique_ptr<ParametrizedType>>(node).get());
break;
case 2:
Visit(*std::get<std::unique_ptr<Expression>>(node));
break;
default:
// error
break;
}
}
// Identifiers, constants, etc. -----------------
void Visitor::Visit(Literal& node) {
@ -339,7 +315,7 @@ void Visitor::Visit(Literal& node) {
//
void Visitor::Visit(NameSubSuperExpression& node) {
void Visitor::Visit(NameSubExpression& node) {
switch (node.index()) {
case 0:
Visit(std::get<std::unique_ptr<NameIdentifier>>(node).get());