luaur-code-gen 0.1.0

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::functions::get_native_proto_exec_data_header_native_proto_exec_data_alt_b::get_native_proto_exec_data_header;
use crate::macros::codegen_assert::CODEGEN_ASSERT;
use crate::records::native_module::NativeModule;

impl NativeModule {
    pub fn native_module_try_get_native_proto(&self, bytecode_id: u32) -> *const u32 {
        let mut lo = 0usize;
        let mut hi = self.native_protos.len();

        while lo < hi {
            let mid = lo + (hi - lo) / 2;
            let mid_bytecode_id = unsafe {
                (*get_native_proto_exec_data_header(self.native_protos[mid].as_ptr())).bytecode_id
            };

            if mid_bytecode_id < bytecode_id {
                lo = mid + 1;
            } else {
                hi = mid;
            }
        }

        if lo == self.native_protos.len() {
            return core::ptr::null();
        }

        let found_bytecode_id = unsafe {
            (*get_native_proto_exec_data_header(self.native_protos[lo].as_ptr())).bytecode_id
        };
        if found_bytecode_id != bytecode_id {
            return core::ptr::null();
        }

        if lo + 1 < self.native_protos.len() {
            let next_bytecode_id = unsafe {
                (*get_native_proto_exec_data_header(self.native_protos[lo + 1].as_ptr()))
                    .bytecode_id
            };
            CODEGEN_ASSERT!(next_bytecode_id != bytecode_id);
        }

        self.native_protos[lo].as_ptr()
    }
}