luaur_repl_cli/functions/
setup_state.rs1use core::ffi::c_void;
2
3use luaur_code_gen::functions::luau_codegen_create::luau_codegen_create;
4use luaur_require::functions::luaopen_require::luaopen_require;
5use luaur_vm::functions::lua_l_openlibs::lua_l_openlibs;
6use luaur_vm::functions::lua_l_register::lua_l_register;
7use luaur_vm::functions::lua_l_sandbox::lua_l_sandbox;
8use luaur_vm::functions::lua_pushvalue::lua_pushvalue;
9use luaur_vm::macros::lua_globalsindex::LUA_GLOBALSINDEX;
10use luaur_vm::macros::lua_pop::lua_pop;
11use luaur_vm::records::lua_l_reg::LuaLReg;
12use luaur_vm::type_aliases::lua_state::lua_State;
13
14use crate::functions::create_cli_require_context::create_cli_require_context;
15use crate::functions::lua_collectgarbage::lua_collectgarbage;
16use crate::functions::lua_loadstring::lua_loadstring;
17use crate::functions::repl_main::repl_codegen_enabled;
18use crate::functions::require_config_init::require_config_init;
19
20pub unsafe fn setup_state(l: *mut lua_State) {
21 if repl_codegen_enabled() {
22 luau_codegen_create(l);
23 }
24
25 lua_l_openlibs(l);
26
27 let funcs: [LuaLReg; 3] = [
30 LuaLReg {
31 name: c"loadstring".as_ptr(),
32 func: Some(lua_loadstring),
33 },
34 LuaLReg {
35 name: c"collectgarbage".as_ptr(),
36 func: Some(lua_collectgarbage),
37 },
38 LuaLReg {
39 name: core::ptr::null(),
40 func: None,
41 },
42 ];
43
44 lua_pushvalue(l, LUA_GLOBALSINDEX);
45 lua_l_register(l, core::ptr::null(), funcs.as_ptr());
46 lua_pop(l, 1);
47
48 let ctx = create_cli_require_context(l);
49 luaopen_require(l, Some(require_config_init), ctx as *mut c_void);
50
51 lua_l_sandbox(l);
52}