[VER 0.3.2-Hotfix]

[Feat] 面对对象(struct)支持,完成对其初始化解析。
[Impl] Value更换为Object,且简单类型按值存储,复杂类型为shared_ptr。
[Impl] 全局使用 Object shared_ptr
This commit is contained in:
2025-12-22 23:19:40 +08:00
parent ec9362c615
commit 8f4fb69653
17 changed files with 327 additions and 582 deletions

View File

@@ -78,7 +78,7 @@ namespace Fig
return makeAst<Ast::VarDefAst>(isPublic, isConst, name, tiName, exp);
}
Object Parser::__parseValue()
ObjectPtr Parser::__parseValue()
{
FString _val = currentToken().getValue();
if (currentToken().getType() == TokenType::LiteralNumber)
@@ -95,7 +95,7 @@ namespace Fig
{
throwAddressableError<SyntaxError>(FStringView(u8"Illegal number literal"));
}
return Object(d);
return std::make_shared<Object>(d);
}
else
{
@@ -109,16 +109,16 @@ namespace Fig
{
throwAddressableError<SyntaxError>(FStringView(u8"Illegal number literal"));
}
return Object(i);
return std::make_shared<Object>(i);
}
}
else if (currentToken().getType() == TokenType::LiteralString)
{
return Object(_val);
return std::make_shared<Object>(_val);
}
else if (currentToken().getType() == TokenType::LiteralBool)
{
return Object((_val == u8"true" ? true : false));
return std::make_shared<Object>((_val == u8"true" ? true : false));
}
else if (currentToken().getType() == TokenType::LiteralNull)
{
@@ -132,7 +132,7 @@ namespace Fig
Ast::ValueExpr Parser::__parseValueExpr()
{
return Ast::ValueExpr(new Ast::ValueExprAst(__parseValue()));
return makeAst<Ast::ValueExprAst> (__parseValue());
}
Ast::FunctionParameters Parser::__parseFunctionParameters()
{