luaur_code_gen/functions/
forg_loop_table_iter.rs1use luaur_vm::macros::lu_tag_iterator::LU_TAG_ITERATOR;
2use luaur_vm::macros::setnvalue::setnvalue;
3use luaur_vm::macros::setobj_2_s::setobj2s;
4use luaur_vm::macros::ttisnil::ttisnil;
5use luaur_vm::records::lua_table::LuaTable;
6use luaur_vm::type_aliases::t_value::TValue;
7
8use crate::type_aliases::lua_state::LuaState;
9
10#[allow(non_snake_case)]
11pub unsafe fn forg_loop_table_iter(
12 L: *mut LuaState,
13 h: *mut LuaTable,
14 mut index: i32,
15 ra: *mut TValue,
16) -> bool {
17 let sizearray = (*h).sizearray;
18
19 while (index as u32) < (sizearray as u32) {
20 let e = (*h).array.add(index as usize);
21
22 if !ttisnil!(e) {
23 (*ra.add(2)).value.p = (index + 1) as usize as *mut core::ffi::c_void;
24 (*ra.add(2)).tt = LU_TAG_ITERATOR;
25
26 setnvalue!(ra.add(3), (index + 1) as f64);
27 setobj2s!(L, ra.add(4), e);
28
29 return true;
30 }
31
32 index += 1;
33 }
34
35 false
36}
37
38#[no_mangle]
39pub unsafe extern "C" fn forgLoopTableIter(
40 L: *mut LuaState,
41 h: *mut core::ffi::c_void,
42 index: i32,
43 ra: *mut TValue,
44) -> bool {
45 forg_loop_table_iter(L, h as *mut LuaTable, index, ra)
46}