luaur_vm/functions/
lua_b_newproxy.rs1use 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}