Skip to main content

luaur_vm/functions/
luaopen_bit_32.rs

1use crate::functions::lua_l_register::lua_l_register;
2use crate::records::lua_l_reg::LuaLReg;
3use crate::type_aliases::lua_state::lua_State;
4
5use crate::functions::b_and::b_and;
6use crate::functions::b_arshift::b_arshift;
7use crate::functions::b_countlz::b_countlz;
8use crate::functions::b_countrz::b_countrz;
9use crate::functions::b_extract::b_extract;
10use crate::functions::b_lrot::b_lrot;
11use crate::functions::b_lshift::b_lshift;
12use crate::functions::b_not::b_not;
13use crate::functions::b_or::b_or;
14use crate::functions::b_replace::b_replace;
15use crate::functions::b_rrot::b_rrot;
16use crate::functions::b_rshift::b_rshift;
17use crate::functions::b_swap::b_swap;
18use crate::functions::b_test::b_test;
19use crate::functions::b_xor::b_xor;
20
21pub unsafe fn luaopen_bit32(L: *mut lua_State) -> core::ffi::c_int {
22    // Faithful port of bitlib[] in lbitlib.cpp (Lua name -> b_* function).
23    let bitlib: [LuaLReg; 16] = [
24        LuaLReg {
25            name: c"arshift".as_ptr(),
26            func: Some(b_arshift),
27        },
28        LuaLReg {
29            name: c"band".as_ptr(),
30            func: Some(b_and),
31        },
32        LuaLReg {
33            name: c"bnot".as_ptr(),
34            func: Some(b_not),
35        },
36        LuaLReg {
37            name: c"bor".as_ptr(),
38            func: Some(b_or),
39        },
40        LuaLReg {
41            name: c"bxor".as_ptr(),
42            func: Some(b_xor),
43        },
44        LuaLReg {
45            name: c"btest".as_ptr(),
46            func: Some(b_test),
47        },
48        LuaLReg {
49            name: c"extract".as_ptr(),
50            func: Some(b_extract),
51        },
52        LuaLReg {
53            name: c"lrotate".as_ptr(),
54            func: Some(b_lrot),
55        },
56        LuaLReg {
57            name: c"lshift".as_ptr(),
58            func: Some(b_lshift),
59        },
60        LuaLReg {
61            name: c"replace".as_ptr(),
62            func: Some(b_replace),
63        },
64        LuaLReg {
65            name: c"rrotate".as_ptr(),
66            func: Some(b_rrot),
67        },
68        LuaLReg {
69            name: c"rshift".as_ptr(),
70            func: Some(b_rshift),
71        },
72        LuaLReg {
73            name: c"countlz".as_ptr(),
74            func: Some(b_countlz),
75        },
76        LuaLReg {
77            name: c"countrz".as_ptr(),
78            func: Some(b_countrz),
79        },
80        LuaLReg {
81            name: c"byteswap".as_ptr(),
82            func: Some(b_swap),
83        },
84        LuaLReg {
85            name: core::ptr::null(),
86            func: None,
87        },
88    ];
89
90    lua_l_register(L, c"bit32".as_ptr(), bitlib.as_ptr());
91
92    1
93}