Files
hakorune/docs/development/current/main/phases/phase-287
tomoaki 433e1d45c0 refactor(joinir): Phase 287 P0.1 - Move verification to debug_assertions
- Move verify_no_phi_dst_overwrite() to debug_assertions.rs
- Move verify_phi_inputs_defined() to debug_assertions.rs
- Move verify_joinir_contracts() to debug_assertions.rs
- Remove duplicate get_instruction_dst() from mod.rs
- mod.rs: 1,555 → ~1,380 lines (-176 lines)
- Semantic invariance: 154/154 smoke tests PASS, Pattern6 RC:9

Phase 287 P0: Big Files Refactoring (意味論不変)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 10:10:59 +09:00
..

Phase 287: Normalizer Hygiene正規化器整理

Status: Planning Date: 2025-12-26 Previous: Phase 286 (Plan Line完全運用化)

概要

Phase 286 でPlan lineへの移行が完了したため、legacy Pattern5 削除とnormalizer.rs の整理を実施。

Phase 286 完了作業(本セッション)

Legacy Pattern5 削除488行

削除理由: Plan line 完全運用化により、legacy Pattern5 は完全にデッドコード化

削除ファイル:

  • src/mir/builder/control_flow/joinir/patterns/pattern5_infinite_early_exit.rs (488行)

関連削除:

  • router.rsLOOP_PATTERNS テーブルから Pattern5 エントリ削除
  • mod.rs から pub mod pattern5_infinite_early_exit; 削除
  • router.rs のドキュメント更新Pattern5 → Pattern4 優先順位へ)

影響範囲:

  • Pattern5 は Plan line の extract_pattern5_plan() 経由で処理されるため、機能退行なし
  • LOOP_PATTERNS テーブルの優先順位: Pattern5 → Pattern4 → Pattern8... から Pattern4 → Pattern8... に変更

Warning クリーンアップ

実行コマンド:

cargo fix --lib -p nyash-rust --allow-dirty

修正内容:

  • 1件の自動修正normalizer.rs
  • 未使用 import などを自動修正

ビルド&テスト確認

ビルド結果:

cargo build --release
# → 成功130 warnings、エラーなし

テスト結果:

tools/smokes/v2/run.sh --profile quick
# → 154/154 PASS ✅

退行なし: quick smoke 154/154 PASS を維持

削除前後の統計

コード削減

項目 削減数
ソースファイル 1ファイル (pattern5_infinite_early_exit.rs)
総削減行数 488行
router.rs エントリ 5行Pattern5 エントリ)
mod.rs 宣言 1行

Pattern優先順位の変更

削除前Phase 131-11+:

Pattern5 (most specific) → Pattern4 → Pattern3 → Pattern1 → Pattern2

削除後Phase 286+:

Pattern4 → Pattern8 → Pattern9 → Pattern3 → Pattern1 → Pattern2

: Pattern5/6/7 は Plan line 経由で処理(PLAN_EXTRACTORS テーブル)

Phase 287 計画(後回し)

P0: normalizer.rs 分割計画

現状: src/mir/builder/control_flow/plan/normalizer.rs が大きすぎる(推定 1,500+ 行)

分割案:

1. Pattern5 正規化ロジック分離430行

  • normalizer/pattern5.rs - Pattern5 専用正規化
  • Pattern5 の複雑な構造展開ロジックを独立モジュール化

2. Helper 関数共通化700行

  • normalizer/helpers.rs - 共通ヘルパー関数
  • 複数パターンで使用される変換ロジック

3. コアロジック残存300行

  • normalizer.rs - PlanNormalizer struct & normalize() エントリーポイント
  • パターン横断的な正規化インターフェース

期待効果:

  • メンテナンス性向上
  • テスト分離Pattern5 正規化のみをユニットテスト)
  • 責任分離SRP原則

P1: LOOP_PATTERNS テーブル完全削除

背景: 全Pattern が Plan line 経由になれば、LOOP_PATTERNS テーブルは不要

前提条件:

  • Pattern1-4 の Plan line 移行完了Phase 286 でPattern1-4はPlan line化済み
  • Pattern8-9 の Plan line 移行完了Phase 286 でPlan line化済み

削除対象:

  • router.rsLOOP_PATTERNS static テーブル40行程度
  • LoopPatternEntry struct不要化

残存:

  • PLAN_EXTRACTORS テーブルのみSSOT

期待効果:

  • 二重管理解消LOOP_PATTERNS vs PLAN_EXTRACTORS
  • ルーティングロジック一本化

実装方針

フェーズ分割

  1. Phase 286完了: Legacy Pattern5 削除 + Warning クリーンアップ
  2. Phase 287-P0保留: normalizer.rs 分割P0優先度は低い
  3. Phase 287-P1将来: LOOP_PATTERNS テーブル削除全Pattern Plan line化後

段階的移行

  • 急がないnormalizer.rs 分割は緊急度低(機能的に問題なし)
  • 機会を待つP1 はPattern1-4完全移行のタイミングで実施

関連ドキュメント

検証項目

Phase 286 完了検証

  • Pattern5 ファイル削除488行
  • router.rs の LOOP_PATTERNS から Pattern5 エントリ削除
  • mod.rs から Pattern5 宣言削除
  • cargo fix 実行Warning クリーンアップ)
  • cargo build --release 成功0エラー
  • quick smoke 154/154 PASS
  • Phase 287 ドキュメント作成

📋 Phase 287-P0/P1 検証(将来)

  • normalizer.rs 分割完了P0
    • pattern5.rs 独立430行
    • helpers.rs 共通化700行
    • normalizer.rs 縮小300行
  • LOOP_PATTERNS テーブル削除P1
    • 全Pattern Plan line経由確認
    • LOOP_PATTERNS static削除
    • LoopPatternEntry struct削除

備考

注意: normalizer.rs の分割は行わない本Phase完了時点では保留

理由:

  • 機能的に問題なし(現在の構造で動作)
  • 緊急度低(開発速度への影響なし)
  • 別Phase対応が適切Phase 287-P0として計画のみ