Skip to main content

luaur_code_gen/methods/
const_prop_state_try_get_register_info.rs

1use crate::functions::vm_reg_op::vm_reg_op;
2use crate::records::const_prop_state::ConstPropState;
3use crate::records::ir_op::IrOp;
4use crate::records::register_info::RegisterInfo;
5
6impl ConstPropState {
7    pub fn try_get_register_info(&mut self, op: IrOp) -> Option<*mut RegisterInfo> {
8        if op.kind() == crate::enums::ir_op_kind::IrOpKind::VmReg {
9            let vm_reg = vm_reg_op(op);
10            if vm_reg > self.max_reg {
11                self.max_reg = vm_reg;
12            }
13            return Some(&mut self.regs[vm_reg as usize] as *mut RegisterInfo);
14        }
15
16        if let Some(link) = self.try_get_reg_link(op) {
17            unsafe {
18                let reg = (*link).reg;
19                let reg_i32 = reg as i32;
20                if reg_i32 > self.max_reg {
21                    self.max_reg = reg_i32;
22                }
23                return Some(&mut self.regs[reg as usize] as *mut RegisterInfo);
24            }
25        }
26
27        None
28    }
29}