Skip to main content

luaur_code_gen/methods/
const_prop_state_invalidate_register_range.rs

1impl crate::records::const_prop_state::ConstPropState {
2    pub fn invalidate_register_range(&mut self, first_reg: i32, count: i32) {
3        if count == -1 {
4            self.invalidate_registers_from(first_reg);
5        } else {
6            let max_reg = self.max_reg;
7            for i in first_reg..(first_reg + count).min(max_reg + 1) {
8                let idx = i as usize;
9
10                // Avoid borrowing `self` (and `self.regs[idx]`) mutably more than once:
11                // - take a raw pointer to the register slot
12                // - perform the invalidation call using the raw pointer as a mutable ref
13                let reg_ptr: *mut crate::records::register_info::RegisterInfo = &mut self.regs[idx];
14                unsafe {
15                    self.invalidate_register_info_bool_bool(&mut *reg_ptr, true, true);
16                }
17            }
18        }
19    }
20}