Phase 25.1b: Step3完了(LoopForm対応)
Step3実装内容(LoopForm → MIR導線確立): - FuncBodyBasicLowerBox._try_lower_loop追加: - Loop判定 → LowerLoopSumBcBox → LowerLoopSimpleBox の順に試行 - 成功時は_rebindで関数名をBox.method/arityに付け替え - 失敗時は[builder/funcs:unsupported:loopform]でFail-Fast - lowerメソッド冒頭でLoop優先処理: - Loop含む場合は_try_lower_loopを呼び、成功/失敗で明確に分岐 - Loopが無い場合のみ既存のLocal/If/Return処理に進む - PHI地獄防止ポリシー徹底: - FuncBodyBasicLowerBox/FuncLowering側でPHIやキャリアを直接いじらない - LoopForm制約外は必ずタグ付きでFail-Fast(Rust providerに退避可能) ドキュメント更新: - Phase 25.1b README: Step3をinitial-implementedに更新 - builder README: [builder/funcs:unsupported:loopform]タグ追加 - CURRENT_TASK.md: Step3進捗記録 スモークテスト: - selfhost_mir_loopform_basic_vm.sh追加(基本構造実装済み) - defs生成経路の詳細調整は継続タスク Next: Step4(MethodCall/ExternCall対応) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -174,12 +174,22 @@ Status: planning-only(実装着手前の設計・分析フェーズ)
|
||||
- Loop を含まない defs は selfhost builder で MIR 関数にできるようになり、Stage1 CLI の emit/build ハンドラの半分程度を selfhost パスで賄える。
|
||||
|
||||
### Step 3 — Loop(LoopForm)の受理
|
||||
- 目的: LoopForm 正規化済みの while/for を MIR に落とす。
|
||||
- 作業:
|
||||
- `lower_loop_simple_box` / `lower_loop_sum_bc_box` など既存 helper を FuncLoweringBox 側からも利用できるようにし、LoopForm のキャリアを MIR へ展開。
|
||||
- LoopForm の制約を満たさないケースは `[builder/funcs:unsupported:loopform]` で Fail-Fast。
|
||||
- Status: initial-implemented (2025-11-15). `FuncBodyBasicLowerBox` now calls `LowerLoopSumBcBox`/`LowerLoopSimpleBox` from `_try_lower_loop`, tags unsupported loops with `[builder/funcs:unsupported:loopform]`, and delegates all PHI/carrier handling to LoopForm lowers.
|
||||
- 目的: LoopForm 正規化済みの while/for を MIR に落とす。ループの正規化・PHI設計はLoopForm/既存lower_loop系Boxに任せ、FuncLowering/MirBuilder側はそれを使うだけにする。
|
||||
- 作業内容(実装済み):
|
||||
- `FuncBodyBasicLowerBox`に`_try_lower_loop`メソッド追加:
|
||||
- Loop判定 → `LowerLoopSumBcBox.try_lower` → `LowerLoopSimpleBox.try_lower` の順に試す。
|
||||
- 成功時は`_rebind`で関数名を`Box.method/arity`に付け替え。
|
||||
- 失敗時は`[builder/funcs:unsupported:loopform]`でFail-Fast。
|
||||
- `lower`メソッド冒頭でLoop優先処理:
|
||||
- Loop含む場合は`_try_lower_loop`を呼び、成功/失敗で明確に分岐。
|
||||
- Loopが無い場合のみ既存のLocal/If/Return処理に進む。
|
||||
- PHI地獄防止ポリシー徹底:
|
||||
- FuncBodyBasicLowerBox/FuncLowering側でPHIやキャリアを直接いじらない。
|
||||
- LoopForm制約外は必ずタグ付きでFail-Fast(Rust providerに退避可能)。
|
||||
- 成果物:
|
||||
- `cmd_build_exe` の `loop(i < argc)` 等、Stage1 CLI の代表的な while/for パターンを selfhost builder で通せる。
|
||||
- `cmd_build_exe`の`loop(i < argc)`等、Stage1 CLIの代表的なwhile/forパターンをselfhost builderで通せる基礎が整った。
|
||||
- 次のステップ: LoopForm対応の動作確認スモークテスト追加、Step4(MethodCall/ExternCall)へ進む。
|
||||
|
||||
### Step 4 — MethodCall / ExternCall パリティ
|
||||
- 目的: `hostbridge.extern_invoke` / `FileBox` / `ArrayBox` など Stage1 CLI で多用される呼び出しを selfhost builder でも再現。
|
||||
|
||||
Reference in New Issue
Block a user