luaur_require/functions/
lua_require.rs1use luaur_vm::functions::lua_getinfo::lua_getinfo;
2use luaur_vm::macros::lua_l_error::luaL_error;
3use luaur_vm::records::lua_debug::LuaDebug;
4use luaur_vm::records::lua_state::lua_State;
5
6use crate::functions::lua_requireinternal::lua_requireinternal;
7
8pub fn lua_require(l: *mut lua_State) -> i32 {
9 unsafe {
10 let mut ar: LuaDebug = core::mem::zeroed();
11 let mut level = 1;
12
13 loop {
14 if lua_getinfo(l, level, c"s".as_ptr(), &mut ar) == 0 {
15 luaL_error!(l, "require is not supported in this context");
16 return 0;
17 }
18 level += 1;
19
20 if ar.what.is_null() || *ar.what != b'C' as core::ffi::c_char {
21 break;
22 }
23 }
24
25 lua_requireinternal(l, ar.source)
26 }
27}