重构类型系统并改进诊断功能
- 更新了类型系统,新增了类型并优化了结构。 - 引入了基类型和派生类,用于函数、结构体和接口类型。 - 实现了类型上下文,用于管理内置类型和类型解析。 - 添加了诊断类,用于收集和报告警告和错误。 - 通过改进错误处理增强了虚拟机执行,以应对递归限制问题。 - 实现了反汇编器,将字节码转换为代码,以改善调试和分析。 - 添加了新的抽象语法树节点,用于成员表达式、对象初始化、接口和结构体定义。 - 引入了语义错误测试,包括重定义、未声明的变量和无效的结构字段。
This commit is contained in:
@@ -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});
|
||||
|
||||
Reference in New Issue
Block a user