luaur_code_gen/methods/
const_prop_state_try_get_register_info.rs1use 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}