Skip to main content

luaur_require/functions/
lua_require.rs

1use 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}