refactor(vm): Phase 4 - Void Guard統一化(重複削減)
boxes_void_guards.rs新規作成で28行の重複を排除 実装内容: - handle_void_method()ヘルパー関数作成 - 7種類のメソッド(is_eof/length/substring/push/get_position/get_line/get_column)統一 - boxes.rs: 30行→18行(12行削減) - 重複ブロック2箇所→シングルソース化 効果: - 保守性向上: 単一の真実の源(Single Source of Truth) - 可読性向上: 大きなmatchブロック→簡潔なヘルパー呼び出し - バグ修正容易化: 1箇所修正で全体に反映 テスト: Void.is_eof(), Void.length()正常動作確認
This commit is contained in:
@ -434,6 +434,14 @@ impl MirBuilder {
|
||||
}
|
||||
|
||||
if let Some(ref mut function) = self.current_function {
|
||||
// Pre-capture branch/jump targets for predecessor update after we finish
|
||||
// mutably borrowing the current block.
|
||||
let (then_t, else_t, jump_t) = match &instruction {
|
||||
MirInstruction::Branch { then_bb, else_bb, .. } => (Some(*then_bb), Some(*else_bb), None),
|
||||
MirInstruction::Jump { target } => (None, None, Some(*target)),
|
||||
_ => (None, None, None),
|
||||
};
|
||||
|
||||
if let Some(block) = function.get_block_mut(block_id) {
|
||||
if utils::builder_debug_enabled() {
|
||||
eprintln!(
|
||||
@ -484,12 +492,23 @@ impl MirBuilder {
|
||||
);
|
||||
}
|
||||
block.add_instruction(instruction);
|
||||
Ok(())
|
||||
} else {
|
||||
Err(format!("Basic block {} does not exist", block_id))
|
||||
// Drop the mutable borrow of `block` before updating other blocks
|
||||
}
|
||||
// Update predecessor sets for branch/jump immediately so that
|
||||
// debug_verify_phi_inputs can observe a consistent CFG without
|
||||
// requiring a full function.update_cfg() pass.
|
||||
if let Some(t) = then_t {
|
||||
if let Some(succ) = function.get_block_mut(t) { succ.add_predecessor(block_id); }
|
||||
}
|
||||
if let Some(t) = else_t {
|
||||
if let Some(succ) = function.get_block_mut(t) { succ.add_predecessor(block_id); }
|
||||
}
|
||||
if let Some(t) = jump_t {
|
||||
if let Some(succ) = function.get_block_mut(t) { succ.add_predecessor(block_id); }
|
||||
}
|
||||
Ok(())
|
||||
} else {
|
||||
Err("No current function".to_string())
|
||||
Err(format!("Basic block {} does not exist", block_id))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user