Documentation ¶
Overview ¶
Package check 实现了一个语义检查器
对于大多数使用者, CheckTree 是唯一一个使用的函数
check不对代码编译的报错进行处理
如果要进行错误处理请自行使用 pkg/gitee.com/u-language/u-language/pkg/errcode
检查的项目 ¶
- 变量的使用是否在声明之前
- 赋值语句的目的操作数与源操作数(参与操作不保存操作结果的数据)类型是否相等
- 赋值语句目的操作数是不是常量
- 运算表达式操作数的类型是否相等
- 运算表达式操作符是否能用于操作数的类型
- if,else if ,for 表达式是否表示布尔值
- for语句的3子句是否从左到右是变量声明语句,布尔表达式,赋值语句;3子句均可以为空
- 函数调用的传参与声明的参数是否匹配
- goto语句的标签是否在所处的函数中
- continue语句是否在for代码块内
- 变量或常量类型是否存在
- 自操作语句操作符是否能用于操作数的类型
- 自操作语句目的操作数是不是常量
- break语句是否在for代码块或switch代码块内
- switch表达式的类型是否和case表达式的类型是否相等
- 结构体是否是递归类型
- 是否循环导入
- 是否解引用非有类型指针
# 辅助Ast CheckTree 进行语义检查的同时对抽象语法树进行下列辅助操作
- 记录运算表达式是否操作字符串
- 记录选择器中的最左值是否是结构体指针类型
- 如果选择器表示方法调用的标识符,记录这个方法所属的类型
- 记录在自动释放块内被调用的函数名
- 记录选择器是否是导入符号
- 记录选择器中的最左值是否是枚举类型
Index ¶
- Variables
- func CheckASSIGN(ptr *ast.ASSIGNNode, sbt *ast.Sbt, t *ast.Tree, InAutoFree bool) (code errcode.ErrCode, msg errcode.Msg)
- func CheckBoolExprNode(ptr ast.Expr, sbt *ast.Sbt, t *ast.Tree, InAutoFree bool) (errcode.ErrCode, errcode.Msg)
- func CheckPackage(p *ast.Package, errctx *errcode.ErrCtx, Thread bool)
- func CheckTree(tree *ast.Tree, errctx *errcode.ErrCtx, Thread bool, IsInPackage bool)
- func IsExportSymbol(s string) bool
Constants ¶
This section is empty.
Variables ¶
View Source
var Deferfunc func() = utils.Deferfunc
Functions ¶
func CheckASSIGN ¶
func CheckASSIGN(ptr *ast.ASSIGNNode, sbt *ast.Sbt, t *ast.Tree, InAutoFree bool) (code errcode.ErrCode, msg errcode.Msg)
CheckASSIGN 检查赋值节点类型是否匹配
- ptr是被检查的赋值节点,不能为nil
- sbt是被检查的赋值节点所属代码块的符号表,不能为nil
- t是被检查节点所属的抽象语法树
- InAutoFree指示是否在自动释放块内
func CheckBoolExprNode ¶
func CheckBoolExprNode(ptr ast.Expr, sbt *ast.Sbt, t *ast.Tree, InAutoFree bool) (errcode.ErrCode, errcode.Msg)
CheckBoolExprNode 一个表达式是不是表示bool
- ptr是被检查的表达式节点
- sbt是被检查的节点所属代码块的符号表,不能为nil
- t是被检查节点所属的抽象语法树
- InAutoFree指示是否在自动释放块内
func CheckPackage ¶
CheckPackage 检查一个包的所有抽象语法树
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.