luaur_vm/functions/
lua_resetthread.rs1use crate::enums::lua_status::lua_Status;
5use crate::functions::cleanupcistack::cleanupcistack;
6use crate::functions::lua_d_realloc_ci::lua_d_realloc_ci;
7use crate::functions::lua_d_reallocstack::luaD_reallocstack;
8use crate::functions::lua_f_close::lua_f_close;
9use crate::macros::api_check::api_check;
10use crate::macros::basic_ci_size::BASIC_CI_SIZE;
11use crate::macros::basic_stack_size::BASIC_STACK_SIZE;
12use crate::macros::extra_stack::EXTRA_STACK;
13use crate::macros::lua_minstack::LUA_MINSTACK;
14use crate::macros::setnilvalue::setnilvalue;
15use crate::type_aliases::lua_state::lua_State;
16
17pub unsafe fn lua_resetthread(L: *mut lua_State) {
18 api_check!(L, !(*L).isactive);
19 api_check!(
20 L,
21 (*L).status != lua_Status::LUA_OK as u8 || (*L).ci == (*L).base_ci
22 );
23
24 lua_f_close(L, (*L).stack);
26 if luaur_common::FFlag::LuauClosureUsageCounter.get() {
27 cleanupcistack(L);
28 }
29
30 let ci = (*L).base_ci;
32 (*ci).func = (*L).stack;
33 (*ci).base = (*ci).func.add(1);
34 (*ci).top = (*ci).base.add(LUA_MINSTACK as usize);
35 setnilvalue!((*ci).func);
36 (*L).ci = ci;
37 if (*L).size_ci != BASIC_CI_SIZE {
38 lua_d_realloc_ci(L, BASIC_CI_SIZE);
39 }
40 (*L).status = lua_Status::LUA_OK as u8;
42 (*L).base = (*(*L).ci).base;
43 (*L).top = (*(*L).ci).base;
44 (*L).nCcalls = 0;
45 (*L).baseCcalls = 0;
46 if (*L).stacksize != BASIC_STACK_SIZE + EXTRA_STACK {
48 luaD_reallocstack(L, BASIC_STACK_SIZE, 0);
49 }
50 for i in 0..(*L).stacksize as usize {
51 setnilvalue!((*L).stack.add(i));
52 }
53}