メインコンテンツまでスキップ

エラー診断

Waveコンパイラはエラーコード(E####)とともに、ソース位置/コンテキスト/解決のヒントを一度に表示します。

出力形式

基本形式は次の通りです。

error[E3001]: セマンティック検証に失敗しました: 宣言されていない識別子`x`の使用
--> file.wave:2:18
1 | fun main() {
2 | println("{}", x);
| ^ このスコープに見つかりません
= コンテキスト:セマンティック検証
= ヘルプ: 変異性、スコープ、および式の有効性の問題を修正

出力項目:

  • error[E....]: エラーコードと要約
  • --> ファイル:行:列: 問題の位置
  • ソースブロック + caret(^) ハイライト
  • コンテキスト, 期待される, 見つかった, , ヘルプ, 提案

代表的なエラーコード

  • E1001 予期しない文字
  • E1002 閉じられていないブロックコメント
  • E1003 閉じられていない文字列
  • E1004 正しくない文字列エスケープ
  • E1005 正しくない文字リテラル
  • E1006 正しくない数値リテラル形式
  • E2001 パーサ構文エラー
  • E3001 意味解析(セマンティックバリデーション)エラー
  • E3102 非ポインタに null を代入
  • E3201 暗黙の整数縮小禁止
  • E9001 バックエンドコード生成内部エラー

バックエンドエラーにもソースの位置を表示

コード生成(LLVM)段階で内部パニックが発生しても、可能な場合は実際の呼び出し・宣言位置を推論して表示します。

error[E9001]: コード生成中のコンパイラ内部エラー(llvm-ir-generation)
--> test.wave:12:9
= 発見: 関数 'foo' が見つかりません
= 注: バックエンドパニックで未解決の関数名から推測されたソース位置

位置の推論が不可能な場合はフォールバック位置が使用され、その事実が に一緒に表示されます。