Commit Graph

2 Commits

Author SHA1 Message Date
fc4c343d88 refactor(mir): Phase 137-6-S1 - choose_pattern_kind SSOT入口を新設
## 目的
Pattern 選択ロジックを SSOT 化し、将来の Canonicalizer 委譲に備える

## 変更内容

### 新規関数: `choose_pattern_kind()`
- 場所: `src/mir/builder/control_flow/joinir/routing.rs`
- 責務: Pattern 選択の SSOT 入口
- 実装: 既存の LoopFeatures ベース選択ロジックを集約

### LoopPatternContext の更新
- `new()` で `choose_pattern_kind()` を使用
- 既存の分散した選択ロジックを SSOT に統一

## 効果
-  Pattern 選択ロジックの SSOT 化(1箇所に集約)
-  将来の Canonicalizer 委譲に備えた構造確立
-  既定挙動完全不変(既存テスト全て PASS)

## テスト結果
-  `cargo build --release`: 成功
-  スモークテスト(simple_*): 5/5 PASS
-  退行なし

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 07:37:23 +09:00
4f41293d86 refactor(mir): Phase 140-P5-A - LoopProcessingContext SSOT化
## 変更内容

### 新規ファイル
- `src/mir/builder/control_flow/joinir/loop_context.rs` (324行)
  - LoopProcessingContext 型定義
  - AST + Skeleton + Pattern の統合 Context
  - verify_parity() メソッド実装

### 修正ファイル
- `src/mir/builder/control_flow/joinir/mod.rs`
  - loop_context モジュール追加

## 実装内容

### LoopProcessingContext 構造
```rust
pub struct LoopProcessingContext<'a> {
    // AST 情報
    pub condition: &'a ASTNode,
    pub body: &'a [ASTNode],
    pub span: Span,

    // Canonicalizer 出力(Option: 未実行時は None)
    pub skeleton: Option<LoopSkeleton>,
    pub decision: Option<RoutingDecision>,

    // Router 情報(常に存在)
    pub pattern_kind: LoopPatternKind,
    pub features: LoopFeatures,
}
```

### 主要メソッド
- `new()`: 新規作成(Canonicalizer 未実行)
- `set_canonicalizer_result()`: Canonicalizer 出力を設定
- `to_loop_ast()`: AST 再構築(parity verification 用)
- `verify_parity()`: Canonicalizer と Router の一致検証

### テスト
- 5 つの単体テスト実装
- Context 作成、AST 再構築、parity 検証をカバー
- 全テスト PASS 

## 効果
- AST + Skeleton + Pattern の SSOT 化
- 重複 AST 再構築コードの削除準備完了
- 情報の一元管理による保守性向上

## 次のステップ
Phase 140-P5-B: parity_checker.rs を Context 化
2025-12-16 07:22:30 +09:00