feat(joinir): Phase 215-2 ExprResult exit contract for Pattern 3
Implements Phase 215 Task 215-2: Wire expr_result exit line through ExitMeta → JoinInlineBoundary → ExitLine → MIR return for Pattern 3. ## Changes ### Fix 1: JoinIR Lowerer (loop_with_if_phi_if_sum.rs:312) - Changed `carrier_only()` → `with_expr_result(sum_final, exit_meta)` - Marks sum final value as expr_result for propagation ### Fix 2: Boundary Builder (pattern3_with_if_phi.rs:176-191) - Added `.with_expr_result(Some(expr_id))` to JoinInlineBoundaryBuilder - Passes expr_result to boundary for ExitLineReconnector ### Fix 3: Final Return (pattern3_with_if_phi.rs:195-219) - Changed from always returning Void to conditional return: - Expr-position loops: Return merge_result ValueId - Statement-position loops: Return Void - Matches Pattern 2 behavior ## Test Results Primary target: - phase212_if_sum_min.hako: RC=2 achieved ✅ Regression tests: - loop_if_phi.hako: RC=2 (existing behavior maintained) ✅ - Pattern 1/2/3 tests: All PASS ✅ ## Architecture Pattern 3 now follows the same ExprResult Exit Contract as Pattern 2: 1. JoinIR lowerer creates expr_result with `with_expr_result()` 2. Boundary builder passes expr_result with `.with_expr_result()` 3. Conversion pipeline returns merge result containing exit PHI ValueId 4. Pattern dispatcher conditionally returns expr_result or Void This enables: - Expr-position loops: Loop result propagates to caller - Statement-position loops: Loop updates variable_map only (returns Void) - Unified contract: Patterns 2 and 3 follow same expr_result flow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
# Phase 213: セッション進捗サマリー
|
||||
|
||||
**Date**: 2025-12-09 (Continuation Session)
|
||||
**Status**: 🚧 進行中
|
||||
**Current Commit**: d7805e59 (Phase 213-2 & Refactoring計画)
|
||||
**Status**: ✅ 完了(Phase 213-2 + Refactoring 5.1)
|
||||
**Current Commit**: 83940186 (Refactoring 5.1 完了)
|
||||
|
||||
---
|
||||
|
||||
@ -50,24 +50,26 @@
|
||||
|
||||
---
|
||||
|
||||
### 🚀 実装中: Refactoring 5.1
|
||||
### ✅ 実装完了: Refactoring 5.1
|
||||
|
||||
**目標:** Pattern 3 を Pattern 4 と同じ ExitMeta ベースアーキテクチャに統一化
|
||||
**目標:** Pattern 3 を Pattern 4 と同じ ExitMeta ベースアーキテクチャに統一化 ✅
|
||||
|
||||
**変更対象:**
|
||||
1. `loop_with_if_phi_minimal.rs`
|
||||
- 署名: `Option<JoinModule>` → `Result<(JoinModule, JoinFragmentMeta), String>`
|
||||
- ExitMeta 動的生成ロジック追加
|
||||
- 署名: `Option<JoinModule>` → `Result<(JoinModule, JoinFragmentMeta), String>` ✅
|
||||
- ExitMeta 動的生成ロジック追加 ✅
|
||||
|
||||
2. `pattern3_with_if_phi.rs`
|
||||
- Hardcoded 定数削除(`PATTERN3_K_EXIT_*_ID`)
|
||||
- Manual exit binding → ExitMetaCollector に置き換え
|
||||
- Hardcoded 定数削除(`PATTERN3_K_EXIT_*_ID`)✅
|
||||
- Manual exit binding → ExitMetaCollector に置き換え ✅
|
||||
|
||||
**期待効果:**
|
||||
- ✅ Hardcoded ValueIds 完全削除
|
||||
- ✅ Pattern 3/4 アーキテクチャ統一化
|
||||
- ✅ 42行削減(pattern3_with_if_phi.rs の22%)
|
||||
- ✅ Phase 213 AST-based generalization の基盤強化
|
||||
**達成効果:**
|
||||
- ✅ Hardcoded ValueIds 完全削除(`PATTERN3_K_EXIT_SUM_FINAL_ID`, `PATTERN3_K_EXIT_COUNT_FINAL_ID`)
|
||||
- ✅ Pattern 3/4 アーキテクチャ統一化(同一の ExitMeta パターン)
|
||||
- ✅ 19行削減(net)、42行の手動ロジック削除
|
||||
- ✅ Phase 214 AST-based generalization の基盤強化
|
||||
- ✅ テスト全 PASS(E2E: `loop_if_phi.hako` → sum=9)
|
||||
- ✅ Commit: `83940186`
|
||||
|
||||
---
|
||||
|
||||
@ -106,25 +108,29 @@ Pattern 3 Builder
|
||||
|
||||
## 📝 次のステップ(推奨順)
|
||||
|
||||
### Step 1: Refactoring 5.1 完了待機 (進行中)
|
||||
- Task エージェント実装中
|
||||
- Build & Test 確認待ち
|
||||
### ✅ Step 1: Refactoring 5.1 完了 (完了)
|
||||
- ✅ Task エージェント実装完了
|
||||
- ✅ Build & Test 確認完了(全テスト PASS)
|
||||
- ✅ Commit: `83940186`
|
||||
|
||||
### Step 2: Refactoring 5.1 統合 & コミット
|
||||
- 実装結果確認
|
||||
- 既存テスト合格確認
|
||||
- コミット & ドキュメント更新
|
||||
### ✅ Step 2: Refactoring 5.1 統合 & コミット (完了)
|
||||
- ✅ 実装結果確認(19行削減、42行ロジック削除)
|
||||
- ✅ 既存テスト合格確認(E2E: loop_if_phi.hako → sum=9)
|
||||
- ✅ コミット & ドキュメント更新
|
||||
|
||||
### Step 3: Refactoring 5.2 実装(選択的)
|
||||
### 🚧 Step 3: Refactoring 5.2 実装(HIGH PRIORITY - 次のステップ)
|
||||
- Dummy count backward compat 削除
|
||||
- Single-carrier テスト廃止 or 更新
|
||||
- Multi-carrier の完全化
|
||||
- 推定時間: 2-3時間
|
||||
- 削減予定: 20行
|
||||
|
||||
### Step 4: Phase 213 本体進行(Phase 214に延期予定)
|
||||
### 📋 Step 4: Phase 214 本体進行(Phase 213 から繰り上げ)
|
||||
- Pattern3IfAnalyzer 実装
|
||||
- AST-based condition lowering
|
||||
- AST-based update expression lowering
|
||||
- ExitMeta による exit binding 統一化
|
||||
- ExitMeta による exit binding 統一化(完了済み)
|
||||
- 目標: `phase212_if_sum_min.hako` → RC=2 達成
|
||||
|
||||
---
|
||||
|
||||
@ -195,5 +201,5 @@ Pattern 3 Builder
|
||||
|
||||
---
|
||||
|
||||
**Status**: Phase 213 の基盤構築完了 ✅
|
||||
**Next**: Refactoring 5.1 の結果確認 & 統合
|
||||
**Status**: Phase 213 完全完了 ✅(Phase 213-2 + Refactoring 5.1)
|
||||
**Next**: Refactoring 5.2(推奨)または Phase 214 本体(AST-based lowerer)
|
||||
|
||||
Reference in New Issue
Block a user