feat(joinir): Phase 84-5 if_phi.rs レガシーフォールバック完全削除
Phase 84-4-B で Case D を 0件に削減完了したことにより、 if_phi.rs のレガシーフォールバックが完全に不要になったため削除。 主な変更: - if_phi.rs 削除(339行) - test_utils.rs 新規作成(テスト専用ユーティリティ分離、127行) - lifecycle.rs: if_phi 呼び出し削除、Phase 84-5 安全ガード追加 - env.rs: phi_fallback_disabled() を常に true に変更 - テスト: A/B テスト → GenericTypeResolver 単独テストに変更 検証結果: - Case D: 0件(完全解消継続) - Tests: 498 passed(Phase 84-4: 497 から +1) Phase 84 プロジェクト完全達成: 15件 → 0件(100%削減) 純削減: 220行 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -2,17 +2,22 @@
|
||||
|
||||
## TL;DR
|
||||
|
||||
**現状**: 4 件の Case D 失敗(Phase 83 + Phase 84-1 + Phase 84-2 + Phase 84-3 実装後)
|
||||
**現状**: Case D 失敗 0 件(Phase 83〜84-4 実装後、dev ガード付きテストで panic なし)
|
||||
|
||||
**主要原因**: BoxCall/Await/QMark の戻り値型が `value_types` に未登録なため、PHI/Copy グラフの「base 型」が欠落していること。
|
||||
**主要原因(解消済み)**:
|
||||
- Const 命令の型アノテーション欠如(Phase 84-1 で修正)
|
||||
- Copy チェーンでの型伝播不足(Phase 84-2 で修正)
|
||||
- PHI + Copy グラフ上の型集約不足(Phase 84-3 で PhiTypeResolver 導入)
|
||||
- BoxCall/Await/QMark の戻り値型未登録(Phase 84-4-B で修正)
|
||||
|
||||
**対応状況**:
|
||||
- Phase 83: MethodReturnHintBox(P3-D)実装で 20 件 → 15 件
|
||||
- Phase 84-1: Const 命令型アノテーション追加で 15 件 → 12 件
|
||||
- Phase 84-2: CopyTypePropagator 導入で 12 件 → 9 件
|
||||
- Phase 84-3: PhiTypeResolver 導入で 9 件 → 4 件
|
||||
- Phase 84-4-B: BoxCall 戻り値型登録で 4 件 → 0 件
|
||||
|
||||
**残タスク**: BoxCall/Await/QMark 戻り値型の登録(Phase 84-4)と、if_phi フォールバックの最終縮退
|
||||
**次タスク候補**: if_phi フォールバックの完全削除(Phase 84-5 / Phase 82 最終仕上げ)
|
||||
|
||||
---
|
||||
|
||||
@ -59,13 +64,10 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
|
||||
- `mir_stage1_cli_entry_like_pattern_verifies` - return 系
|
||||
- 他の return リテラルを含むテスト
|
||||
|
||||
### 残存する問題(現時点の整理)
|
||||
### 残存する問題(Phase 84 終了時点)
|
||||
|
||||
- **BoxCall/Await/QMark 戻り値型の未登録**
|
||||
- await 構文(`test_lowering_await_expression`)
|
||||
- QMark (`?`) 構文(`mir_lowering_of_qmark_propagate`)
|
||||
- Stage1 CLI 系の BoxCall 戻り値(2 テスト)
|
||||
- PhiTypeResolver 自体は設計通り動作しており、base 定義(BoxCall 等)に型が入っていないために Case D が残っている。
|
||||
- Case D panic は dev ガード付きテストでも 0 件。
|
||||
- 残っている課題は「if_phi フォールバックそのものの削除」と、その前提となる `infer_type_from_phi*` callsite の整理のみ。
|
||||
|
||||
---
|
||||
|
||||
@ -118,6 +120,23 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
|
||||
- Case D: 9 件 → 4 件(約 56% 削減)。
|
||||
- 残り 4 件は BoxCall/Await/QMark 戻り値型が `value_types` に登録されていないため、PhiTypeResolver から見ても「base 型が不明」のケースとして扱われている。
|
||||
|
||||
### Phase 84-4: BoxCall/Await/QMark 戻り値型登録(完了)
|
||||
|
||||
**Status**: ✅ 実装完了(Phase 84-4-B)
|
||||
|
||||
**ファイル**:
|
||||
- `src/mir/builder/utils.rs`(新規)
|
||||
- `infer_boxcall_return_type()` ヘルパー関数を追加(約 75 行)
|
||||
- 27 個のビルトイン Box メソッドに対する戻り値型マッピングを集約
|
||||
- BoxCall lowering 呼び出し元(`emit_box_or_plugin_call` 相当)で、戻り値型を `value_types` に登録
|
||||
|
||||
**対応メソッド**(抜粋):
|
||||
- StringBox / IntegerBox / BoolBox / ArrayBox / MapBox / Result-like(QMark 相当)/ Stage1CliBox など、計 27 メソッド。
|
||||
|
||||
**効果**:
|
||||
- `NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib` 実行時の Case D panic が 4 件 → 0 件に。
|
||||
- Await/QMark 系テストは BoxCall 経路の型登録で全て解消され、追加の Await 専用実装は不要となった。
|
||||
|
||||
---
|
||||
|
||||
## 推奨アクション
|
||||
@ -135,16 +154,16 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
|
||||
|
||||
## 期待される最終結果
|
||||
|
||||
| Phase | Case D 件数 | 修正率 | 備考 |
|
||||
|-------|------------|--------|-----|
|
||||
| Phase 82 終了時 | 20 件 | - | lifecycle 修正後 |
|
||||
| Phase 83 後 | 15 件 | 25% | MethodReturnHintBox(P3-D) |
|
||||
| Phase 84-1 後 | 12 件 | 40% | Const 型アノテーション |
|
||||
| Phase 84-2 後 | 9 件 | 55% | CopyTypePropagator |
|
||||
| Phase 84-3 後 | 4 件 | 80% | PhiTypeResolver(PHI + Copy グラフ) |
|
||||
| Phase 84-4 後(目標) | 0-2 件 | 90-100% | BoxCall/Await/QMark 型登録 |
|
||||
| Phase | Case D 件数 | 修正率 | 備考 |
|
||||
|--------------|------------|--------|-----|
|
||||
| Phase 82 終了時 | 20 件 | - | lifecycle 修正後 |
|
||||
| Phase 83 後 | 15 件 | 25% | MethodReturnHintBox(P3-D) |
|
||||
| Phase 84-1 後 | 12 件 | 40% | Const 型アノテーション |
|
||||
| Phase 84-2 後 | 9 件 | 55% | CopyTypePropagator |
|
||||
| Phase 84-3 後 | 4 件 | 80% | PhiTypeResolver(PHI + Copy グラフ) |
|
||||
| Phase 84-4 後 | 0 件 | 100% | BoxCall/Await/QMark 型登録 |
|
||||
|
||||
**最終目標**: Case D を 0-2 件まで縮小し、`infer_type_from_phi*` を本線から外せる状態にする。
|
||||
**最終目標**: Case D を 0 件にし、`infer_type_from_phi*` を本線から外せる状態を達成済み。次ステップで if_phi フォールバック(約 300 行)を構造的に削除する。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user