luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
use luaur_vm::macros::lu_tag_iterator::LU_TAG_ITERATOR;
use luaur_vm::macros::setnvalue::setnvalue;
use luaur_vm::macros::setobj_2_s::setobj2s;
use luaur_vm::macros::ttisnil::ttisnil;
use luaur_vm::records::lua_table::LuaTable;
use luaur_vm::type_aliases::t_value::TValue;

use crate::type_aliases::lua_state::LuaState;

#[allow(non_snake_case)]
pub unsafe fn forg_loop_table_iter(
    L: *mut LuaState,
    h: *mut LuaTable,
    mut index: i32,
    ra: *mut TValue,
) -> bool {
    let sizearray = (*h).sizearray;

    while (index as u32) < (sizearray as u32) {
        let e = (*h).array.add(index as usize);

        if !ttisnil!(e) {
            (*ra.add(2)).value.p = (index + 1) as usize as *mut core::ffi::c_void;
            (*ra.add(2)).tt = LU_TAG_ITERATOR;

            setnvalue!(ra.add(3), (index + 1) as f64);
            setobj2s!(L, ra.add(4), e);

            return true;
        }

        index += 1;
    }

    false
}

#[no_mangle]
pub unsafe extern "C" fn forgLoopTableIter(
    L: *mut LuaState,
    h: *mut core::ffi::c_void,
    index: i32,
    ra: *mut TValue,
) -> bool {
    forg_loop_table_iter(L, h as *mut LuaTable, index, ra)
}