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:
nyash-codex
2025-12-10 01:40:18 +09:00
parent 272d99f3de
commit e2508f9f08
5 changed files with 458 additions and 887 deletions

View File

@ -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 の基盤強化
- ✅ テスト全 PASSE2E: `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