エラー診断
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' が見つかりません
= 注: バックエンドパニックで未解決の関数名から推測されたソース位置
位置の推論が不可能な場合はフォールバック位置が使用され、その事実が 注 に一緒に表示されます。