Skip to main content

luaur_vm/functions/
lua_b_newproxy.rs

1use crate::enums::lua_type::lua_Type;
2use crate::functions::lua_newuserdatatagged::lua_newuserdatatagged;
3use crate::functions::lua_setmetatable::lua_setmetatable;
4use crate::functions::lua_toboolean::lua_toboolean;
5use crate::functions::lua_type::lua_type;
6use crate::macros::lua_l_argexpected::luaL_argexpected;
7use crate::macros::lua_newtable::lua_newtable;
8use crate::macros::utag_proxy::UTAG_PROXY;
9use crate::type_aliases::lua_state::lua_State;
10
11#[allow(non_snake_case)]
12pub unsafe fn lua_b_newproxy(L: *mut lua_State) -> i32 {
13    let t = lua_type(L, 1);
14    luaL_argexpected!(
15        L,
16        t == lua_Type::LUA_TNIL as i32
17            || t == lua_Type::LUA_TBOOLEAN as i32
18            || t == lua_Type::LUA_TNONE as i32,
19        1,
20        "nil or boolean"
21    );
22
23    let needsmt = lua_toboolean(L, 1) != 0;
24
25    lua_newuserdatatagged(L, 0, UTAG_PROXY);
26
27    if needsmt {
28        lua_newtable(L);
29        lua_setmetatable(L, -2);
30    }
31
32    1
33}