use crate::enums::ir_cmd::IrCmd;
use crate::enums::ir_op_kind::IrOpKind;
use crate::macros::op_a::op_a;
use crate::records::ir_block::IrBlock;
use crate::records::ir_function::IrFunction;
use crate::records::ir_inst::IrInst;
pub fn try_get_next_block_in_chain(function: &mut IrFunction, block: &mut IrBlock) -> *mut IrBlock {
let (is_jump, jump_op) = {
let term_inst: &mut IrInst = &mut function.instructions[block.finish as usize];
(term_inst.cmd == IrCmd::JUMP, op_a(term_inst))
};
if is_jump && jump_op.kind() == IrOpKind::Block {
let target: &mut IrBlock = function.block_op(jump_op);
if target.sortkey == block.sortkey && target.chainkey == block.chainkey + 1 {
return target as *mut IrBlock;
}
}
core::ptr::null_mut()
}