[feat]类初始化

This commit is contained in:
2025-12-22 17:38:52 +08:00
parent cff6bb77a3
commit 34a56beb90
13 changed files with 294 additions and 107 deletions

View File

@@ -11,13 +11,27 @@ namespace Fig::Ast
std::vector<std::pair<FString, Expression>> args;
enum class InitMode
{
Positional = 1,
Named,
Shorthand
} initMode;
/*
3 ways of calling constructor
.1 Person {"Fig", 1, "IDK"};
.2 Person {name: "Fig", age: 1, sex: "IDK"}; // can be unordered
.3 Person {name, age, sex};
*/
InitExprAst()
{
type = AstType::InitExpr;
}
InitExprAst(FString _structName, std::vector<std::pair<FString, Expression>> _args) :
structName(std::move(_structName)), args(std::move(_args))
InitExprAst(FString _structName, std::vector<std::pair<FString, Expression>> _args, InitMode _initMode) :
structName(std::move(_structName)), args(std::move(_args)), initMode(_initMode)
{
type = AstType::InitExpr;
}

View File

@@ -1,26 +0,0 @@
#pragma once
#include <Ast/astBase.hpp>
namespace Fig::Ast
{
class VarAssignSt final : public StatementAst
{
public:
const FString varName;
const Expression valueExpr;
VarAssignSt()
{
type = AstType::VarAssignSt;
}
VarAssignSt(FString _varName, Expression _valueExpr) :
varName(std::move(_varName)), valueExpr(std::move(_valueExpr))
{
type = AstType::VarAssignSt;
}
};
using VarAssign = std::shared_ptr<VarAssignSt>;
}; // namespace Fig

View File

@@ -25,7 +25,6 @@ namespace Fig::Ast
UnaryExpr,
BinaryExpr,
TernaryExpr,
ListExpr, // []
TupleExpr, // ()
MapExpr, // {}
@@ -215,7 +214,8 @@ namespace Fig::Ast
ShiftRight, // >>
// 赋值表达式
Walrus, // :=
Assign, // =
// Walrus, // :=
// 点运算符 .
Dot,
@@ -250,7 +250,7 @@ namespace Fig::Ast
Operator::ShiftLeft,
Operator::ShiftRight,
Operator::Walrus,
// Operator::Walrus,
Operator::Dot};
static const std::unordered_set<Operator> ternaryOps{Operator::TernaryCond};
@@ -290,7 +290,7 @@ namespace Fig::Ast
{TokenType::ShiftRight, Operator::ShiftRight},
// 赋值表达式
{TokenType::Walrus, Operator::Walrus},
// {TokenType::Walrus, Operator::Walrus},
// 点运算符
{TokenType::Dot, Operator::Dot},
}; // :=