Skip to main content

luaur_vm/functions/
b_replace.rs

1use crate::functions::fieldargs::fieldargs;
2use crate::functions::lua_l_checkunsigned::lua_l_checkunsigned;
3use crate::functions::lua_pushunsigned::lua_pushunsigned;
4use crate::macros::mask::mask;
5use crate::type_aliases::b_uint::b_uint;
6use crate::type_aliases::lua_state::lua_State;
7
8pub fn b_replace(l: *mut lua_State) -> core::ffi::c_int {
9    let mut w: core::ffi::c_int = 0;
10    let r: b_uint = unsafe { lua_l_checkunsigned(l, 1) };
11    let mut v: b_uint = unsafe { lua_l_checkunsigned(l, 2) };
12    let f: core::ffi::c_int = unsafe { fieldargs(l, 3, &mut w) };
13    let m: b_uint = mask(w);
14    v &= m;
15    let r = (r & !(m << f)) | (v << f);
16    lua_pushunsigned(l, r);
17    1
18}