refactor(mir): Phase 6-1 - Add BasicBlock/MirFunction helper methods (foundation for ~50 line reduction)
【目的】 JSON v0 Bridge(if_else.rs, try_catch.rs, loop_.rs)で重複するPHI生成・terminator設定パターンを統一するための基礎ヘルパーメソッド追加 【実装内容】 1. BasicBlock::update_phi_input()メソッド追加(17行) - loop back-edge PHI更新を簡略化 - 手動ループ検索パターンを統一化 - エラーハンドリング統一 2. MirFunction::set_jump_terminator()メソッド追加(14行) - if/else/loop降下での終端設定を簡略化 - 未終端チェックを内包 - Option処理を統一 3. MirFunction::set_branch_terminator()メソッド追加(15行) - if/else条件分岐の終端設定を簡略化 - Option処理を統一 【技術的改善】 - **Single Source of Truth**: 終端設定・PHI更新ロジックが一元化 - **エラーハンドリング統一**: Result型で明示的エラー処理 - **箱化**: 関連処理を BasicBlock/MirFunction に箱化 【修正箇所】 - src/mir/basic_block.rs: - HashMap import追加 - update_phi_input()メソッド追加(17行) - src/mir/function.rs: - MirInstruction import追加 - set_jump_terminator()メソッド追加(14行) - set_branch_terminator()メソッド追加(15行) 【テスト結果】 ✅ ビルド成功(0 errors) ✅ userbox_*スモークテスト: 全6テストPASS 【次のフェーズ(Phase 6-2予定)】 これらのヘルパーメソッドを使って以下を簡略化予定: - loop_.rs: ~10行削減(update_phi_input使用) - if_else.rs: ~5行削減(set_branch_terminator使用) - try_catch.rs: ~15行削減(両メソッド使用) - 合計: ~30行削減見込み 【Phase 15目標への寄与】 - フェーズ1完了(基礎ヘルパー追加) - フェーズ2準備完了(~150行削減可能な土台確立) - 箱理論準拠: 「箱にする」「境界を作る」「戻せる」完全実現 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
use super::{EffectMask, MirInstruction, ValueId};
|
||||
use std::collections::HashSet;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fmt;
|
||||
|
||||
/// Unique identifier for basic blocks within a function
|
||||
@ -219,6 +219,24 @@ impl BasicBlock {
|
||||
self.instructions.insert(phi_count, instruction);
|
||||
}
|
||||
|
||||
/// Update PHI instruction input by destination ValueId
|
||||
/// Used for loop back-edge PHI updates
|
||||
pub fn update_phi_input(
|
||||
&mut self,
|
||||
phi_dst: ValueId,
|
||||
incoming: (BasicBlockId, ValueId),
|
||||
) -> Result<(), String> {
|
||||
for inst in &mut self.instructions {
|
||||
if let MirInstruction::Phi { dst, inputs } = inst {
|
||||
if *dst == phi_dst {
|
||||
inputs.push(incoming);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(format!("PHI instruction with dst {:?} not found in block {:?}", phi_dst, self.id))
|
||||
}
|
||||
|
||||
/// Replace terminator instruction
|
||||
pub fn set_terminator(&mut self, terminator: MirInstruction) {
|
||||
if !self.is_terminator(&terminator) {
|
||||
|
||||
Reference in New Issue
Block a user