luaur-code-gen 0.1.2

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::code_gen_compilation_result::CodeGenCompilationResult;
use crate::functions::bind_native_protos::bind_native_protos;
use crate::records::module_bind_result::ModuleBindResult;
use crate::records::shared_code_gen_context::SharedCodeGenContext;
use crate::type_aliases::module_id::ModuleId;
use alloc::vec::Vec;
use luaur_vm::records::proto::Proto;

impl SharedCodeGenContext {
    pub fn try_bind_existing_module(
        &mut self,
        module_id: &ModuleId,
        module_protos: &Vec<*mut Proto>,
    ) -> Option<ModuleBindResult> {
        let native_module_ref = self.shared_allocator.try_get_native_module(module_id);

        if native_module_ref.native_module_ref_empty() {
            return None;
        }

        let native_module = unsafe { &*native_module_ref.native_module_ref_get() };
        let mut native_protos = native_module.native_module_get_native_protos().clone();
        let protos_bound = bind_native_protos(module_protos, &mut native_protos, false);
        native_module.native_module_add_refs(protos_bound as usize);

        Some(ModuleBindResult {
            compilation_result: CodeGenCompilationResult::Success,
            functions_bound: protos_bound,
        })
    }
}