1use crate::functions::auxopen::auxopen;
5use crate::functions::lua_b_assert::lua_b_assert;
6use crate::functions::lua_b_error::lua_b_error;
7use crate::functions::lua_b_gcinfo::lua_b_gcinfo;
8use crate::functions::lua_b_getfenv::lua_b_getfenv;
9use crate::functions::lua_b_getmetatable::lua_b_getmetatable;
10use crate::functions::lua_b_inext::lua_b_inext;
11use crate::functions::lua_b_ipairs::lua_b_ipairs;
12use crate::functions::lua_b_newproxy::lua_b_newproxy;
13use crate::functions::lua_b_next::lua_b_next;
14use crate::functions::lua_b_pairs::lua_b_pairs;
15use crate::functions::lua_b_pcallcont::lua_b_pcallcont;
16use crate::functions::lua_b_pcally::lua_b_pcally;
17use crate::functions::lua_b_print::lua_b_print;
18use crate::functions::lua_b_rawequal::lua_b_rawequal;
19use crate::functions::lua_b_rawget::lua_b_rawget;
20use crate::functions::lua_b_rawlen::lua_b_rawlen;
21use crate::functions::lua_b_rawset::lua_b_rawset;
22use crate::functions::lua_b_select::lua_b_select;
23use crate::functions::lua_b_setfenv::lua_b_setfenv;
24use crate::functions::lua_b_setmetatable::lua_b_setmetatable;
25use crate::functions::lua_b_tonumber::lua_b_tonumber;
26use crate::functions::lua_b_tostring::lua_b_tostring;
27use crate::functions::lua_b_type::lua_b_type;
28use crate::functions::lua_b_typeof::lua_b_typeof;
29use crate::functions::lua_b_xpcallcont::lua_b_xpcallcont;
30use crate::functions::lua_b_xpcally::lua_b_xpcally;
31use crate::functions::lua_l_register::lua_l_register;
32use crate::functions::lua_pushcclosurek::lua_pushcclosurek;
33use crate::functions::lua_pushlstring::lua_pushlstring;
34use crate::functions::lua_pushvalue::lua_pushvalue;
35use crate::functions::lua_setfield::lua_setfield;
36use crate::macros::lua_globalsindex::LUA_GLOBALSINDEX;
37use crate::macros::lua_setglobal::lua_setglobal;
38use crate::records::lua_l_reg::LuaLReg;
39use crate::type_aliases::lua_state::lua_State;
40
41struct BaseFuncs([LuaLReg; 20]);
42unsafe impl Sync for BaseFuncs {}
43
44static BASE_FUNCS: BaseFuncs = BaseFuncs([
45 LuaLReg {
46 name: c"assert".as_ptr(),
47 func: Some(lua_b_assert),
48 },
49 LuaLReg {
50 name: c"error".as_ptr(),
51 func: Some(lua_b_error),
52 },
53 LuaLReg {
54 name: c"gcinfo".as_ptr(),
55 func: Some(lua_b_gcinfo),
56 },
57 LuaLReg {
58 name: c"getfenv".as_ptr(),
59 func: Some(lua_b_getfenv),
60 },
61 LuaLReg {
62 name: c"getmetatable".as_ptr(),
63 func: Some(lua_b_getmetatable),
64 },
65 LuaLReg {
66 name: c"next".as_ptr(),
67 func: Some(lua_b_next),
68 },
69 LuaLReg {
70 name: c"newproxy".as_ptr(),
71 func: Some(lua_b_newproxy),
72 },
73 LuaLReg {
74 name: c"print".as_ptr(),
75 func: Some(lua_b_print),
76 },
77 LuaLReg {
78 name: c"rawequal".as_ptr(),
79 func: Some(lua_b_rawequal),
80 },
81 LuaLReg {
82 name: c"rawget".as_ptr(),
83 func: Some(lua_b_rawget),
84 },
85 LuaLReg {
86 name: c"rawset".as_ptr(),
87 func: Some(lua_b_rawset),
88 },
89 LuaLReg {
90 name: c"rawlen".as_ptr(),
91 func: Some(lua_b_rawlen),
92 },
93 LuaLReg {
94 name: c"select".as_ptr(),
95 func: Some(lua_b_select),
96 },
97 LuaLReg {
98 name: c"setfenv".as_ptr(),
99 func: Some(lua_b_setfenv),
100 },
101 LuaLReg {
102 name: c"setmetatable".as_ptr(),
103 func: Some(lua_b_setmetatable),
104 },
105 LuaLReg {
106 name: c"tonumber".as_ptr(),
107 func: Some(lua_b_tonumber),
108 },
109 LuaLReg {
110 name: c"tostring".as_ptr(),
111 func: Some(lua_b_tostring),
112 },
113 LuaLReg {
114 name: c"type".as_ptr(),
115 func: Some(lua_b_type),
116 },
117 LuaLReg {
118 name: c"typeof".as_ptr(),
119 func: Some(lua_b_typeof),
120 },
121 LuaLReg {
122 name: core::ptr::null(),
123 func: None,
124 },
125]);
126
127#[allow(non_snake_case)]
128pub unsafe fn luaopen_base(L: *mut lua_State) -> i32 {
129 lua_pushvalue(L, LUA_GLOBALSINDEX);
130 lua_setglobal(L, c"_G".as_ptr());
131
132 lua_l_register(L, c"_G".as_ptr(), BASE_FUNCS.0.as_ptr());
133 lua_pushlstring(L, c"Luau".as_ptr(), 4);
134 lua_setglobal(L, c"_VERSION".as_ptr());
135
136 auxopen(L, c"ipairs".as_ptr(), Some(lua_b_ipairs), Some(lua_b_inext));
137 auxopen(L, c"pairs".as_ptr(), Some(lua_b_pairs), Some(lua_b_next));
138
139 lua_pushcclosurek(
140 L,
141 Some(lua_b_pcally),
142 c"pcall".as_ptr(),
143 0,
144 Some(lua_b_pcallcont),
145 );
146 lua_setfield(L, -2, c"pcall".as_ptr());
147
148 lua_pushcclosurek(
149 L,
150 Some(lua_b_xpcally),
151 c"xpcall".as_ptr(),
152 0,
153 Some(lua_b_xpcallcont),
154 );
155 lua_setfield(L, -2, c"xpcall".as_ptr());
156
157 1
158}