## Summary Extracted binding management into dedicated BindingContext struct, completing step 4 of 7 in the Context Box refactoring plan. ## Changes - NEW: src/mir/builder/binding_context.rs (BindingContext struct + helpers) - Modified 7 files to use binding_ctx (SSOT pattern with legacy sync) - Added comprehensive unit tests for BindingContext ## Extracted Fields - binding_map: BTreeMap<String, BindingId> → binding_ctx.binding_map ## Benefits - Clear separation: BindingId mapping isolated from MirBuilder - Better testability: BindingContext can be tested independently - Consistent pattern: Same SSOT + legacy sync approach as previous steps ## Tests - cargo test --release --lib: 1008/1008 passed - phase135_trim_mir_verify.sh: PASS - Backward compatibility: 100% maintained (deprecated fields synced) ## Progress Phase 136 Context Extraction: 4/7 complete (57%) - ✅ Step 1: TypeContext - ✅ Step 2: CoreContext - ✅ Step 3: ScopeContext - ✅ Step 4: BindingContext (this commit) - ⏳ Step 5: VariableContext - ⏳ Step 6: MetadataContext - ⏳ Step 7: RegionContext 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Phase 136: ValueId allocator SSOT 徹底(残存 value_gen.next() 掃討)
Status
- 状態: ✅ P0 完了
- スコープ: 関数内 ValueId 発行を
MirBuilder::next_value_id()に一本化し、予約PHI/引数/ローカルとの衝突余地を消す
Problem
Phase 135 で契約(allocator SSOT)は固まったが、一部のコードで builder.value_gen.next() を直接使用していた。
これは関数内で走る場合、予約PHI dst や関数引数との ValueId 衝突を引き起こす可能性がある。
Fix
SSOT 化対象
-
src/mir/builder.rs:new_typed_value()- 型付きValueId発行API- Before:
let id = self.value_gen.next(); - After:
let id = self.next_value_id();(関数コンテキストを尊重)
- Before:
-
テストコード内の
value_gen.next()- 関数スコープをシミュレートtest_shadowing_binding_restore: 関数スコープシミュレーションでnext_value_id()を使用test_valueid_binding_parallel_allocation: SSOT allocator を使用(Module context フォールバック維持)
OK(Module context フォールバック)
以下は既に if current_function.is_some() で関数コンテキストを判定しており、Module context のフォールバックとして value_gen.next() を使用(OK):
src/mir/builder/utils.rs:next_value_id()- SSOT allocator 自体(43行目)src/mir/builder/utils.rs:pin_to_slot()- 436行目src/mir/builder/utils.rs:materialize_local()- 467行目src/mir/utils/phi_helpers.rs:insert_phi_unified()- 69行目
Acceptance
- ✅
rg -n "value_gen\.next\(" src/mirで関数内経路から消える - ✅
cargo test --release --lib- 997 passed - ✅
phase135_trim_mir_verify.sh- PASS - ✅
phase132_exit_phi_parity.sh- 3/3 PASS
Remaining Tasks(残課題)
なし。全ての関数内経路から value_gen.next() を排除完了。Module context のフォールバックは意図的に残す。