Skip to main content

luaur_vm/functions/
stack_init.rs

1//! Node: `cxx:Function:Luau.VM:VM/src/lstate.cpp:28:stack_init`
2//! Source: `VM/src/lstate.cpp:28-48` (hand-ported)
3
4use crate::macros::basic_ci_size::BASIC_CI_SIZE;
5use crate::macros::basic_stack_size::BASIC_STACK_SIZE;
6use crate::macros::extra_stack::EXTRA_STACK;
7use crate::macros::lua_m_newarray::luaM_newarray;
8use crate::macros::lua_minstack::LUA_MINSTACK;
9use crate::macros::setnilvalue::setnilvalue;
10use crate::records::call_info::CallInfo;
11use crate::type_aliases::lua_state::lua_State;
12use crate::type_aliases::t_value::TValue;
13
14pub unsafe fn stack_init(L1: *mut lua_State, L: *mut lua_State) {
15    // initialize CallInfo array
16    (*L1).base_ci = luaM_newarray!(L, BASIC_CI_SIZE, CallInfo, (*L1).hdr.memcat);
17    (*L1).ci = (*L1).base_ci;
18    (*L1).size_ci = BASIC_CI_SIZE;
19    (*L1).end_ci = (*L1).base_ci.add((*L1).size_ci as usize - 1);
20    // initialize stack array
21    (*L1).stack = luaM_newarray!(L, BASIC_STACK_SIZE + EXTRA_STACK, TValue, (*L1).hdr.memcat);
22    (*L1).stacksize = BASIC_STACK_SIZE + EXTRA_STACK;
23    let stack = (*L1).stack;
24    for i in 0..(BASIC_STACK_SIZE + EXTRA_STACK) as usize {
25        setnilvalue!(stack.add(i)); // erase new stack
26    }
27    (*L1).top = stack;
28    (*L1).stack_last = stack.add(((*L1).stacksize - EXTRA_STACK) as usize);
29    // initialize first ci
30    (*(*L1).ci).func = (*L1).top;
31    setnilvalue!((*L1).top); // `function' entry for this `ci'
32    (*L1).top = (*L1).top.add(1);
33    (*L1).base = (*L1).top;
34    (*(*L1).ci).base = (*L1).top;
35    (*(*L1).ci).top = (*L1).top.add(LUA_MINSTACK as usize);
36}