Skip to main content

luaur_code_gen/functions/
execute_getvarargs_const.rs

1use core::ffi::c_int;
2
3use crate::macros::vm_reg::VM_REG;
4use crate::type_aliases::lua_state::lua_State;
5use luaur_vm::macros::clvalue::clvalue;
6use luaur_vm::macros::setnilvalue::setnilvalue;
7use luaur_vm::macros::setobj_2_s::setobj2s;
8use luaur_vm::type_aliases::stk_id::StkId;
9use luaur_vm::type_aliases::t_value::TValue;
10
11pub unsafe fn execute_getvarargs_const(L: *mut lua_State, base: StkId, rai: c_int, b: c_int) {
12    let l_ptr = L as *mut luaur_vm::records::lua_state::lua_State;
13    let cl = clvalue!((*(*l_ptr).ci).func);
14    let p = {
15        let l = &(*cl).inner.l;
16        l.p
17    };
18    let n = base.offset_from((*(*l_ptr).ci).func) as c_int - (*p).numparams as c_int - 1;
19
20    let ra = VM_REG!(rai, l_ptr, base) as *mut TValue;
21
22    let mut j = 0;
23    while j < b && j < n {
24        setobj2s!(
25            l_ptr,
26            ra.add(j as usize),
27            base.sub(n as usize).add(j as usize) as *const TValue
28        );
29        j += 1;
30    }
31    let mut j = n;
32    while j < b {
33        setnilvalue!(ra.add(j as usize));
34        j += 1;
35    }
36}
37
38#[no_mangle]
39pub unsafe extern "C" fn executeGETVARARGSConst(
40    L: *mut lua_State,
41    base: StkId,
42    rai: c_int,
43    b: c_int,
44) {
45    execute_getvarargs_const(L, base, rai, b);
46}