Skip to main content

luaur_vm/functions/
lua_e_newthread.rs

1//! Node: `cxx:Function:Luau.VM:VM/src/lstate.cpp:116:luaE_newthread`
2//! Source: `VM/src/lstate.cpp:116-128` (hand-ported)
3
4use crate::enums::lua_type::lua_Type;
5use crate::functions::lua_m_newgco::luaM_newgco_;
6use crate::functions::preinit_state::preinit_state;
7use crate::functions::stack_init::stack_init;
8use crate::macros::iswhite::iswhite;
9use crate::macros::lua_c_init::luaC_init;
10use crate::records::gc_object::GcObject;
11use crate::type_aliases::lua_state::lua_State;
12use luaur_common::macros::luau_assert::LUAU_ASSERT;
13
14#[allow(non_snake_case)]
15pub unsafe fn luaE_newthread(L: *mut lua_State) -> *mut lua_State {
16    let L1 =
17        luaM_newgco_(L, core::mem::size_of::<lua_State>(), (*L).activememcat) as *mut lua_State;
18    luaC_init!(L, L1, lua_Type::LUA_TTHREAD as i32);
19    preinit_state(L1, (*L).global);
20    (*L1).activememcat = (*L).activememcat; // inherit the active memory category
21    stack_init(L1, L); // init stack
22    (*L1).gt = (*L).gt; // share table of globals
23    (*L1).singlestep = (*L).singlestep;
24    LUAU_ASSERT!(iswhite!(L1 as *mut GcObject)); // iswhite(obj2gco(L1))
25    L1
26}
27
28#[allow(unused_imports)]
29pub use luaE_newthread as lua_e_newthread;