feat(joinir): Phase 65-2-A StringBox メソッド型ヒント実装

Phase 65-2-A 完了:P3-A(StringBox メソッド)型ヒント実装

## 実装内容

### 1. type_inference.rs 新規作成
- `infer_method_return_type()`: StringBox/ArrayBox/MapBox メソッド型推論
- `infer_box_type()`: Box コンストラクタ型推論(Phase 65-2-B 用)
- 8 テスト全て PASS

### 2. JoinInst::MethodCall に type_hint 追加
- `src/mir/join_ir/mod.rs`: `type_hint: Option<MirType>` フィールド追加
- 段階的拡大のため Optional 設計(既存コード破壊なし)

### 3. read_quoted.rs で型ヒント設定
- substring() → String(4箇所)
- length() → Integer(1箇所)
- read_quoted 系関数で完全な型ヒント供給

### 4. 汎用経路は None で後方互換性維持
- expr.rs: 汎用 MethodCall は `type_hint: None`
- convert.rs: 型ヒント追加(Phase 65-3 で活用予定)
- json.rs: JSON シリアライズ対応

## テスト結果
-  type_inference モジュール: 8/8 PASS
-  ビルド: 0 エラー

## 次のステップ
- Phase 65-2-B: Box コンストラクタ型ヒント実装

---
🌟 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-30 06:10:58 +09:00
parent 6566a3cd12
commit b4b6a01b92
8 changed files with 202 additions and 7 deletions

View File

@ -295,13 +295,14 @@
- conservative.rs: ConservativeMerge::analyze が phi_merge.rs/phi.rs から使用中
- Phase 43 推奨: NestedIfMerge 適用範囲拡大 → phi_merge.rs JoinIR 移行
- docs: `docs/private/roadmap2/phases/phase-42-if-phi-level3-removal/README.md`
- **Phase 43+: If 側 PHI 本体削除**
- if_phi.rs / conservative.rs の残存関数は全て parse_loop 以外からも呼ばれている
- 他の関数print_tokens 等) JoinIR 経路に乗せてから本体削除
- **Phase 61-7+: If PHI 大型統合P2 候補)**
- `compute_modified_names_if`: 変更変数検出を JoinIR の modified 変数集合解析に統合(~75行
- `get_conservative_if_values`: incoming 値解決を PhiSpec に移行、void fallback 削除(~70行
- 期待削減: 合計 145行
- **Phase 65: P3-A/B 型ヒント実装Method/Box 最小対応)**
- P3-A: StringBox メソッドsubstring/length 等)の戻り値型に JoinIR type_hint を付与
- P3-B: Box コンストラクタnew ArrayBox/new MapBox 等) JoinIR type_hint を付与
- lifecycle.rs の `is_type_hint_target()` に P3-A/B を追加し、P1/P2 と同じ経路に乗せる
- 代表ケースベースでは削除条件 5/5 達成 → infer_type_from_phi は P3-Cジェネリック型向けフォールバックのみ残す
- **Phase 66+: P3-C / If PHI 本体削除**
- ArrayBox.get などジェネリック型の扱いを別フェーズで設計(必要なら型システム拡張)
- P3-C まで JoinIR 型ヒント化が完了した段階で infer_type_from_phi 本体削除と if_phi.rs の大掃除に入る
- **Classifier Trio**
- LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox を LoopScopeShape に吸収し、JoinIR lowering / LoopForm 側から直接 LoopScopeShape を見る構造に整理。
- **Mir 決定性(小フェーズ予定)**