重构类型系统并改进诊断功能

- 更新了类型系统,新增了类型并优化了结构。
- 引入了基类型和派生类,用于函数、结构体和接口类型。
- 实现了类型上下文,用于管理内置类型和类型解析。
- 添加了诊断类,用于收集和报告警告和错误。
- 通过改进错误处理增强了虚拟机执行,以应对递归限制问题。
- 实现了反汇编器,将字节码转换为代码,以改善调试和分析。
- 添加了新的抽象语法树节点,用于成员表达式、对象初始化、接口和结构体定义。
- 引入了语义错误测试,包括重定义、未声明的变量和无效的结构字段。
This commit is contained in:
2026-03-10 12:33:17 +08:00
parent 90448006ff
commit 0f635ccf2b
47 changed files with 2365 additions and 2541 deletions

View File

@@ -9,7 +9,7 @@
namespace Fig
{
Result<LiteralExpr *, Error> Parser::parseLiteralExpr() // 当前token为literal时调用
Result<Expr *, Error> Parser::parseLiteralExpr() // 当前token为literal时调用
{
StateProtector p(this, {State::ParsingLiteralExpr});
@@ -17,7 +17,7 @@ namespace Fig
LiteralExpr *node = arena.Allocate<LiteralExpr>(literal_token, makeSourceLocation(literal_token));
return node;
}
Result<IdentiExpr *, Error> Parser::parseIdentiExpr() // 当前token为Identifier调用
Result<Expr *, Error> Parser::parseIdentiExpr() // 当前token为Identifier调用
{
StateProtector p(this, {State::ParsingIdentiExpr});
@@ -27,7 +27,7 @@ namespace Fig
return node;
}
Result<InfixExpr *, Error> Parser::parseInfixExpr(Expr *lhs) // 当前token为 op
Result<Expr *, Error> Parser::parseInfixExpr(Expr *lhs) // 当前token为 op
{
StateProtector p(this, {State::ParsingInfixExpr});
@@ -46,7 +46,7 @@ namespace Fig
return node;
}
Result<PrefixExpr *, Error> Parser::parsePrefixExpr() // 当前token为op
Result<Expr *, Error> Parser::parsePrefixExpr() // 当前token为op
{
StateProtector p(this, {State::ParsingPrefixExpr});
@@ -65,7 +65,7 @@ namespace Fig
return node;
}
Result<IndexExpr *, Error> Parser::parseIndexExpr(
Result<Expr *, Error> Parser::parseIndexExpr(
Expr *base) // 由 parseExpression调用, 当前token为 `[`
{
StateProtector p(this, {State::ParsingIndexExpr});
@@ -91,7 +91,7 @@ namespace Fig
return indexExpr;
}
Result<CallExpr *, Error> Parser::parseCallExpr(
Result<Expr *, Error> Parser::parseCallExpr(
Expr *callee) // 由 parseExpression调用, 当前token为 `(`
{
StateProtector p(this, {State::ParsingCallExpr});