check

package
v0.0.0-...-0e42c13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2023 License: BSD-3-Clause Imports: 10 Imported by: 0

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

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

func CheckPackage(p *ast.Package, errctx *errcode.ErrCtx, Thread bool)

CheckPackage 检查一个包的所有抽象语法树

func CheckTree

func CheckTree(tree *ast.Tree, errctx *errcode.ErrCtx, Thread bool, IsInPackage bool)

CheckTree 检查一颗ast树

  • tree是要检查的ast树
  • errctx是错误处理上下文
  • Thread是控制是否并发

func IsExportSymbol

func IsExportSymbol(s string) bool

IsExportSymbol 返回一个符号是导出标识符

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL