- 增加了对 Lambda 表达式的初步解析支持,包括参数处理和返回类型。Lambda闭包尚未支持。 - 引入了用于对象初始化的新的表达式,支持可选的命名参数。 - 改进了表达式语法错误的错误报告。 - 更新了解析器和分析器以处理新的表达式类型并验证其语义。 - 修改了现有测试以涵盖新功能并确保其正确性。 - 改进了各种解析和语义错误的诊断。
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
/*!
|
|
@file src/Ast/Stmt/StructDefStmt.hpp
|
|
@brief 结构体定义 AST 节点
|
|
*/
|
|
|
|
#pragma once
|
|
#include <Ast/Base.hpp>
|
|
#include <Ast/Stmt/FnDefStmt.hpp>
|
|
|
|
namespace Fig
|
|
{
|
|
struct StructDefStmt final : public Stmt
|
|
{
|
|
struct Field
|
|
{
|
|
bool isPublic;
|
|
bool typeInfer;
|
|
|
|
String name;
|
|
TypeExpr *type;
|
|
Expr *initExpr;
|
|
};
|
|
bool isPublic;
|
|
String name;
|
|
DynArray<String> typeParameters;
|
|
DynArray<Field> fields;
|
|
DynArray<FnDefStmt *> methods;
|
|
|
|
StructDefStmt()
|
|
{
|
|
type = AstType::StructDefStmt;
|
|
}
|
|
StructDefStmt(bool _p,
|
|
String _n,
|
|
DynArray<String> _tp,
|
|
DynArray<Field> _f,
|
|
DynArray<FnDefStmt *> _m,
|
|
SourceLocation _loc) :
|
|
isPublic(_p),
|
|
name(std::move(_n)),
|
|
typeParameters(std::move(_tp)),
|
|
fields(std::move(_f)),
|
|
methods(std::move(_m))
|
|
{
|
|
type = AstType::StructDefStmt;
|
|
location = std::move(_loc);
|
|
}
|
|
|
|
virtual String toString() const override
|
|
{
|
|
String detail = name;
|
|
if (!typeParameters.empty())
|
|
{
|
|
detail += "<...>";
|
|
}
|
|
return std::format("<StructDefStmt '{}'>", detail);
|
|
}
|
|
};
|
|
} // namespace Fig
|