diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 39ccaf22..9c30a28e 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -157,18 +157,38 @@ - ConservativeMerge struct 定義と付随テストコードを削除し、挙動差分がないことを phi_core / JoinIR テストで確認。 - Phase 61-1〜61-3 では If-in-loop 専用の箱化を進め、JoinIR 側に PHI 生成の SSOT を寄せた。 - IfPhiContext でループ内 If の CFG と変数スナップショットをまとめ、IfInLoopPhiEmitter で pre/then/else の snapshot と carrier 集合から必要な φ を構成する thin box を追加。 - - dev フラグ `HAKO_JOINIR_IF_IN_LOOP_ENABLE=1` 有効時には、JoinIR パターンマッチ成功した if-in-loop について JoinIR + IfPhiContext + IfInLoopPhiEmitter 経由で PHI を生成できるようになった(Route A/B 互換、既定はまだ legacy)。 -- JoinIR/phi_core 関連テストは全て PASS。既知の `local` キーワード問題を除き、新たな退行はなし。 + - dev フラグ `HAKO_JOINIR_IF_IN_LOOP_ENABLE=1` 有効時には、JoinIR パターンマッチ成功した if-in-loop について JoinIR + IfPhiContext + IfInLoopPhiEmitter 経路で PHI を生成できるようになった(Route A/B 互換、既定はまだ legacy)。 +- Phase 61-4: **If Toplevel PHI (Fallthrough-Join) 実装** ✅ 完了(2025-11-29) + - ループ外 If の「then 直後に結合点がない」パターン(toplevel_return)を JoinIR で表現。 + - IfInLoopPhiEmitter が IfPhiContext::pure_if() でループ外 If もサポート(統一インターフェース)。 + - `toplevel_if_ret_explicit.hako` テストで toplevel_return パターン動作確認済み。 + - docs: `docs/development/current/main/phase61-4-toplevel-if-design.md` +- Phase 61-5: **If PHI 削減計画策定** ✅ 完了(2025-11-29) + - 61-5.1: If PHI 関数リスト作成(26関数、3カテゴリ) + - 61-5.2: JoinIR カバレッジ調査(in_loop/partial/none) + - 61-5.3: 優先度表作成(P1: 18関数、P2: 5関数、P3: 3関数) + - 61-5.4: Phase 61-6 候補選定(3個: set_if_context, dev フラグ, A/B テスト削除) + - docs: `docs/development/current/main/phase61-5-*.md` - Phase P1: **If Handler 箱化モジュール化** ✅ 完了(2025-11-29) - ループ内 If 処理の 5 パターン(Empty/SingleVarThen/SingleVarBoth/ConditionalEffect/Unsupported)を `IfInLoopPattern` enum で分類。 - `if_in_loop/` モジュール(9 ファイル、~480 行)を新設し、`stmt_handlers.rs` から 154 行削減(40% 削減達成)。 - 全 56 JoinIR tests PASS(回帰なし)、保守性・拡張性向上(新パターン追加が容易に)。 - docs: `docs/development/refactoring/p1-if-handler-boxification-plan.md` +- JoinIR/phi_core 関連テストは全て PASS。既知の `local` キーワード問題を除き、新たな退行はなし。 --- ## 2. 中期 TODO(ざっくり) +- **Phase 61-6: If PHI JoinIR 化 第2弾(薄いラッパー削除)** 🎯 次のタスク + - 61-6.1: P1 薄いラッパー削除(26行削減見込み) + - `set_if_context` 削除: loop_builder/if_lowering.rs で直接 IfPhiContext 生成に置き換え(11行) + - If Lowering dev フラグ削除: `joinir_if_select_enabled()` チェック削除、デフォルト有効化(15行) + - 61-6.2: P2 A/B テスト観察関数削除(50行削減見込み) + - `extract_phi_spec_from_builder`, `compare_and_log_phi_specs` 削除 + - if_lowering.rs の A/B 比較ロジック削除 + - 期待削減: 合計 76行、JoinIR SSOT 確立 + - docs: `docs/development/current/main/phase61-5.4-next-phase-candidates.md` - **Phase 42: PHI Workaround 条件付きスキップ** ✅ 完了(2025-11-28) - ✅ 42-1: PHI workaround 内容の文書化完了(README.md に記録) - ✅ 42-2: `parser_control_box.hako:85-139` に条件付きスキップ実装 @@ -183,6 +203,10 @@ - **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行 - **Classifier Trio** - LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox を LoopScopeShape に吸収し、JoinIR lowering / LoopForm 側から直接 LoopScopeShape を見る構造に整理。 - **Mir 決定性(小フェーズ予定)** diff --git a/docs/private b/docs/private index c941a543..dde5eb0c 160000 --- a/docs/private +++ b/docs/private @@ -1 +1 @@ -Subproject commit c941a543685a4931f63a2529eca6618d7cf53f6b +Subproject commit dde5eb0cb265cf8cfddcbef53a454f7102db17ce