luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_block_kind::IrBlockKind;
use crate::functions::apply_substitutions_ir_utils_alt_b::apply_substitutions_ir_function_ir_inst;
use crate::functions::const_prop_in_inst::const_prop_in_inst;
use crate::functions::fold_constants::fold_constants;
use crate::records::const_prop_state::ConstPropState;
use crate::records::ir_block::IrBlock;
use crate::records::ir_builder::IrBuilder;

const K_BLOCK_FLAG_SAFE_ENV_CHECK: u8 = 1 << 0;

pub fn const_prop_in_block(build: &mut IrBuilder, block: &mut IrBlock, state: &mut ConstPropState) {
    let function: *mut crate::records::ir_function::IrFunction = &mut build.function;

    if (block.flags & K_BLOCK_FLAG_SAFE_ENV_CHECK) != 0 {
        state.in_safe_env = true;
    }

    for index in block.start..=block.finish {
        unsafe {
            let inst = &mut (&mut (*function).instructions)[index as usize] as *mut _;

            apply_substitutions_ir_function_ir_inst(&mut *function, &mut *inst);
            fold_constants(build, &mut *function, block, index);
            const_prop_in_inst(state, build, &mut *function, block, &mut *inst, index);
        }

        if block.kind == IrBlockKind::Dead {
            break;
        }
    }
}