const -> let

This commit is contained in:
ProgramSnail 2023-07-03 19:05:50 +03:00
parent 3ae6ed079d
commit 189306df26
33 changed files with 406 additions and 285 deletions

View file

@ -131,7 +131,6 @@ using SubExpressionToken = std::variant<
std::unique_ptr<ReferenceExpression>>;
//
struct FunctionCallExpression;
struct ArrayExpression;
using SubExpression = std::variant< // BiaryOperatorExpression is FunctionCallExpression
std::unique_ptr<FunctionCallExpression>,
std::unique_ptr<SubExpressionToken>>;
@ -149,11 +148,17 @@ using PrefixedExpression = std::variant<
//
struct LambdaFunction;
struct TypeConstructor;
struct AndExpression;
struct OrExpression;
struct ArrayExpression;
using Expression = std::variant<
std::unique_ptr<LambdaFunction>,
std::unique_ptr<TypeConstructor>,
std::unique_ptr<PrefixedExpression>,
std::unique_ptr<SubExpression>>;
std::unique_ptr<SubExpression>,
std::unique_ptr<AndExpression>,
std::unique_ptr<OrExpression>,
std::unique_ptr<ArrayExpression>>;
//
struct TupleExpression;
struct VariantExpression;
@ -161,7 +166,6 @@ using SuperExpression = std::variant<
std::unique_ptr<FlowControl>,
std::unique_ptr<TupleExpression>,
std::unique_ptr<VariantExpression>,
std::unique_ptr<ArrayExpression>,
std::unique_ptr<Expression>>;
//
@ -181,6 +185,8 @@ struct ReturnExpression;
struct TypeConstructorParameter;
struct TypeConstructor;
struct LambdaFunction;
struct AndExpression;
struct OrExpression;
struct ArrayExpression;
// Name
@ -525,7 +531,7 @@ struct FunctionCallExpression {
std::unique_ptr<WrappedTypeExpression>>> prefix;
NameOrOperatorIdentifier name;
std::vector<std::unique_ptr<TypeExpression>> parameters;
std::vector<SubExpression> arguments;
std::vector<std::pair<std::optional<NameIdentifier>, SubExpression>> arguments;
std::optional<size_t> precedence; // for operators
bool is_binary_operator_expression = false; // for operators
@ -587,6 +593,18 @@ struct LambdaFunction {
utils::IdType return_type_graph_id_ = 0;
};
struct AndExpression {
BaseNode base;
std::vector<SubExpression> expressions;
};
struct OrExpression {
BaseNode base;
std::vector<SubExpression> expressions;
};
struct ArrayExpression {
BaseNode base;
@ -632,7 +650,7 @@ struct Name {
struct FunctionType {
BaseNode base;
std::vector<std::unique_ptr<ExtendedScopedAnyType>> types;
std::vector<std::pair<std::optional<NameIdentifier>, std::unique_ptr<ExtendedScopedAnyType>>> types;
};
struct TupleType {