luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
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))
    };

    // Follow the strict block chain
    if is_jump && jump_op.kind() == IrOpKind::Block {
        let target: &mut IrBlock = function.block_op(jump_op);

        // Has to have the same sorting key and a consecutive chain key
        if target.sortkey == block.sortkey && target.chainkey == block.chainkey + 1 {
            return target as *mut IrBlock;
        }
    }

    core::ptr::null_mut()
}