Skip to main content

luaur_vm/functions/
luaopen_table.rs

1//! Node: `cxx:Function:Luau.VM:VM/src/ltablib.cpp:619:luaopen_table`
2//! Source: `VM/src/ltablib.cpp:596-628` (hand-ported)
3
4use crate::functions::foreach::foreach;
5use crate::functions::foreachi::foreachi;
6use crate::functions::getn::getn;
7use crate::functions::lua_l_register::lua_l_register;
8use crate::functions::lua_setfield::lua_setfield;
9use crate::functions::maxn::maxn;
10use crate::functions::tclear::tclear;
11use crate::functions::tclone::tclone;
12use crate::functions::tconcat::tconcat;
13use crate::functions::tcreate::tcreate;
14use crate::functions::tfind::tfind;
15use crate::functions::tfreeze::tfreeze;
16use crate::functions::tinsert::tinsert;
17use crate::functions::tisfrozen::tisfrozen;
18use crate::functions::tmove::tmove;
19use crate::functions::tpack::tpack;
20use crate::functions::tremove::tremove;
21use crate::functions::tsort::tsort;
22use crate::functions::tunpack::tunpack;
23use crate::macros::lua_pushcfunction::LUA_PUSHCFUNCTION;
24use crate::macros::lua_setglobal::lua_setglobal;
25use crate::records::lua_l_reg::LuaLReg;
26use crate::type_aliases::lua_state::lua_State;
27
28struct TabFuncs([LuaLReg; 18]);
29unsafe impl Sync for TabFuncs {}
30
31static TAB_FUNCS: TabFuncs = TabFuncs([
32    LuaLReg {
33        name: c"concat".as_ptr(),
34        func: Some(tconcat),
35    },
36    LuaLReg {
37        name: c"foreach".as_ptr(),
38        func: Some(foreach),
39    },
40    LuaLReg {
41        name: c"foreachi".as_ptr(),
42        func: Some(foreachi),
43    },
44    LuaLReg {
45        name: c"getn".as_ptr(),
46        func: Some(getn),
47    },
48    LuaLReg {
49        name: c"maxn".as_ptr(),
50        func: Some(maxn),
51    },
52    LuaLReg {
53        name: c"insert".as_ptr(),
54        func: Some(tinsert),
55    },
56    LuaLReg {
57        name: c"remove".as_ptr(),
58        func: Some(tremove),
59    },
60    LuaLReg {
61        name: c"sort".as_ptr(),
62        func: Some(tsort),
63    },
64    LuaLReg {
65        name: c"pack".as_ptr(),
66        func: Some(tpack),
67    },
68    LuaLReg {
69        name: c"unpack".as_ptr(),
70        func: Some(tunpack),
71    },
72    LuaLReg {
73        name: c"move".as_ptr(),
74        func: Some(tmove),
75    },
76    LuaLReg {
77        name: c"create".as_ptr(),
78        func: Some(tcreate),
79    },
80    LuaLReg {
81        name: c"find".as_ptr(),
82        func: Some(tfind),
83    },
84    LuaLReg {
85        name: c"clear".as_ptr(),
86        func: Some(tclear),
87    },
88    LuaLReg {
89        name: c"freeze".as_ptr(),
90        func: Some(tfreeze),
91    },
92    LuaLReg {
93        name: c"isfrozen".as_ptr(),
94        func: Some(tisfrozen),
95    },
96    LuaLReg {
97        name: c"clone".as_ptr(),
98        func: Some(tclone),
99    },
100    LuaLReg {
101        name: core::ptr::null(),
102        func: None,
103    },
104]);
105
106#[allow(non_snake_case)]
107pub unsafe fn luaopen_table(L: *mut lua_State) -> core::ffi::c_int {
108    lua_l_register(L, c"table".as_ptr(), TAB_FUNCS.0.as_ptr());
109
110    LUA_PUSHCFUNCTION(L, Some(tunpack), c"unpack".as_ptr());
111    lua_setglobal(L, c"unpack".as_ptr());
112
113    1
114}