Skip to main content

luaur_vm/functions/
lua_b_getmetatable.rs

1use crate::functions::lua_getmetatable::lua_getmetatable;
2use crate::functions::lua_l_checkany::lua_l_checkany;
3use crate::functions::lua_l_getmetafield::lua_l_getmetafield;
4use crate::functions::lua_pushnil::lua_pushnil;
5use crate::type_aliases::lua_state::lua_State;
6
7#[no_mangle]
8pub unsafe fn lua_b_getmetatable(L: *mut lua_State) -> core::ffi::c_int {
9    lua_l_checkany(L, 1);
10
11    if lua_getmetatable(L, 1) == 0 {
12        lua_pushnil(L);
13        return 1; // no metatable
14    }
15
16    lua_l_getmetafield(L, 1, c"__metatable".as_ptr());
17    1 // returns either __metatable field (if present) or metatable
18}