0f635ccf2b
- 更新了类型系统,新增了类型并优化了结构。 - 引入了基类型和派生类,用于函数、结构体和接口类型。 - 实现了类型上下文,用于管理内置类型和类型解析。 - 添加了诊断类,用于收集和报告警告和错误。 - 通过改进错误处理增强了虚拟机执行,以应对递归限制问题。 - 实现了反汇编器,将字节码转换为代码,以改善调试和分析。 - 添加了新的抽象语法树节点,用于成员表达式、对象初始化、接口和结构体定义。 - 引入了语义错误测试,包括重定义、未声明的变量和无效的结构字段。
57 lines
1.4 KiB
C++
57 lines
1.4 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
|
|
{
|
|
String name;
|
|
TypeExpr *type;
|
|
bool isPublic;
|
|
};
|
|
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
|