跳到主要内容

错误诊断

Wave编译器显示代码错误(E####)及其来源位置/上下文/解决提示。

输出格式

基本格式如下。

error[E3001]: 语义验证失败: 使用未声明的标识符 `x`
--> file.wave:2:18
1 | fun main() {
2 | println("{}", x);
| ^ 未在该范围内找到
= 语境: 语义验证
= 帮助: 修复可变性、作用域和表达式有效性问题

输出项目:

  • error[E....]: 错误代码及摘要
  • --> 文件:行:列: 问题位置
  • 源代码块 + 插入符(^)高亮
  • 上下文, 预期, 找到, 注释, 帮助, 建议

代表错误代码

  • E1001 未预期的字符
  • E1002 未关闭的块注释
  • E1003 未关闭的字符串
  • E1004 错误的字符串转义
  • E1005 错误的字符字面量
  • E1006 错误的数字字面量格式
  • E2001 解析器语法错误
  • E3001 语义分析错误
  • E3102null赋值为非指针
  • E3201 禁止隐式整数缩减
  • E9001 后端代码生成内部错误

后端错误也可指示源位置

即使代码生成(LLVM)阶段出现内部故障,如果可能的话,也会推断并显示具体调用/声明位置。

error[E9001]: 编译器在代码生成(llvm-ir-generation)期间内部错误
--> test.wave:12:9
= 找到: 找不到函数 'foo'
= 注意: 从后端故障中的未解决函数名称推断源位置

如果无法推断位置,将使用备用位置,并在注释中显示此情况。