luaur_vm/functions/
correctstack.rs1use crate::type_aliases::call_info::CallInfo;
2use crate::type_aliases::lua_state::lua_State;
3use crate::type_aliases::t_value::TValue;
4use crate::type_aliases::up_val::UpVal;
5
6#[allow(non_snake_case)]
7pub unsafe fn correctstack(L: *mut lua_State, oldstack: *mut TValue) {
8 let stack_bytes = (*L).stack as *mut u8;
9 let oldstack_addr = oldstack as isize;
10
11 (*L).top = stack_bytes.wrapping_offset((*L).top as isize - oldstack_addr) as *mut TValue;
12
13 let mut up: *mut UpVal = (*L).openupval;
14 while !up.is_null() {
15 (*up).v = stack_bytes.wrapping_offset((*up).v as isize - oldstack_addr) as *mut TValue;
16 up = (*up).u.open.threadnext;
17 }
18
19 let mut ci: *mut CallInfo = (*L).base_ci;
20 while ci <= (*L).ci {
21 (*ci).top = stack_bytes.wrapping_offset((*ci).top as isize - oldstack_addr) as *mut TValue;
22 (*ci).base =
23 stack_bytes.wrapping_offset((*ci).base as isize - oldstack_addr) as *mut TValue;
24 (*ci).func =
25 stack_bytes.wrapping_offset((*ci).func as isize - oldstack_addr) as *mut TValue;
26 ci = ci.wrapping_add(1);
27 }
28
29 (*L).base = stack_bytes.wrapping_offset((*L).base as isize - oldstack_addr) as *mut TValue;
30}