grammar refactoring: build_visitor fixed & visitors tested

This commit is contained in:
ProgramSnail 2023-04-11 13:49:22 +03:00
parent 3c2d496a85
commit e4802896bd
35 changed files with 118128 additions and 91770 deletions

View file

@ -139,13 +139,6 @@ struct ReferenceExpression;
struct FunctionCallExpression;
//
struct TypeExpression;
using FunctionArgument = std::variant<
SubExpressionToken,
std::unique_ptr<TypeExpression>>;
//
struct TupleExpression;
struct VariantExpression;
struct ReturnExpression;
@ -212,6 +205,12 @@ using TypeSubExpression = std::variant<
std::unique_ptr<AnyTypeIdentifier>,
std::unique_ptr<ParametrizedType>>;
//
using FunctionArgument = std::variant<
SubExpressionToken,
TypeSubExpression>;
// Comments [IGNORE] -----------------
// Identifiers, constants, etc. -----------------
@ -233,7 +232,7 @@ using Literal = std::variant<
//
using NameSubExpression = std::variant<
std::unique_ptr<NameIdentifier>,
std::unique_ptr<ExtendedName>,
std::unique_ptr<Literal>,
std::unique_ptr<SuperExpression>>;
@ -295,6 +294,7 @@ struct AliasDefinitionStatement {
struct VariableDefinitionStatement {
enum { Var, Const } modifier;
enum { Move, Assign } assignment_modifier;
AnyName name;
SuperExpression value;
};
@ -306,6 +306,7 @@ struct FunctionDeclaration {
};
struct FunctionDefinitionStatement {
bool is_inline;
std::unique_ptr<FunctionDefinition> definition;
SuperExpression value;
};
@ -437,8 +438,9 @@ struct ReturnExpression {
};
struct TypeConstructor {
enum AssignmentModifier { Move, Assign };
std::unique_ptr<ParametrizedType> type;
std::vector<std::pair<ExtendedName, SubExpression>> parameters;
std::vector<std::tuple<ExtendedName, AssignmentModifier, SubExpression>> parameters;
};
struct LambdaFunction {
@ -502,7 +504,7 @@ struct ParametrizedType {
struct TypeExpression {
std::vector<TypeSubExpression> namespaces;
AnyTypeIdentifier type;
std::optional<size_t> ArraySize; // if array; 0 - dynamic size
std::optional<size_t> array_size; // if array; 0 - dynamic size
};
struct ExtendedScopedAnyType {