luaur-compiler 0.1.3

Luau source-to-bytecode compiler (Rust).
Documentation
use crate::records::builtin_ast_types::BuiltinAstTypes;
use crate::records::compile_options::CompileOptions;
use crate::records::compiler::Compiler;
use luaur_ast::records::ast_local::AstLocal;
use luaur_ast::records::ast_name::AstName;
use luaur_ast::records::ast_name_table::AstNameTable;
use luaur_ast::records::location::Location;
use luaur_bytecode::records::bytecode_builder::BytecodeBuilder;
use luaur_common::records::dense_hash_map::DenseHashMap;

impl Compiler {
    pub fn compiler(
        bytecode: &mut BytecodeBuilder,
        options: &CompileOptions,
        names: &mut AstNameTable,
    ) -> Compiler {
        let export_name = names.get_or_add_c_str(c"__EXP".as_ptr());

        let mut compiler = Compiler {
            bytecode: bytecode as *mut BytecodeBuilder,
            options: *options,
            functions: DenseHashMap::new(core::ptr::null_mut()),
            locals: DenseHashMap::new(core::ptr::null_mut()),
            globals: DenseHashMap::new(AstName::default()),
            variables: DenseHashMap::new(core::ptr::null_mut()),
            constants: DenseHashMap::new(core::ptr::null_mut()),
            locstants: DenseHashMap::new(core::ptr::null_mut()),
            table_constants: DenseHashMap::new(core::ptr::null_mut()),
            table_shapes: DenseHashMap::new(core::ptr::null_mut()),
            builtins: DenseHashMap::new(core::ptr::null_mut()),
            userdata_types: DenseHashMap::new(AstName::default()),
            function_types: DenseHashMap::new(core::ptr::null_mut()),
            local_types: DenseHashMap::new(core::ptr::null_mut()),
            expr_types: DenseHashMap::new(core::ptr::null_mut()),
            inline_builtins: DenseHashMap::new(core::ptr::null_mut()),
            inline_builtins_backup: DenseHashMap::new(core::ptr::null_mut()),
            expr_changes: Vec::new(),
            local_changes: Vec::new(),
            builtin_types: BuiltinAstTypes::new(options.vector_type),
            names: names as *mut AstNameTable,
            export_table_local: AstLocal::new(
                export_name,
                Location::default(),
                core::ptr::null_mut(),
                0,
                0,
                core::ptr::null_mut(),
                true,
            ),
            builtins_fold: core::ptr::null(),
            builtins_fold_library_k: false,
            reg_top: 0,
            stack_size: 0,
            arg_count: 0,
            has_loops: false,
            current_function: core::ptr::null_mut(),
            block_depth: 0,
            getfenv_used: false,
            setfenv_used: false,
            local_stack: Vec::new(),
            upvals: Vec::new(),
            loop_jumps: Vec::new(),
            loops: Vec::new(),
            inline_frames: Vec::new(),
            captures: Vec::new(),
            exported_locals: Vec::new(),
            exported_classes: Vec::new(),
        };

        compiler.local_stack.reserve(16);
        compiler.upvals.reserve(16);
        compiler
    }
}

pub fn compiler_compiler(
    bytecode: &mut BytecodeBuilder,
    options: &CompileOptions,
    names: &mut AstNameTable,
) -> Compiler {
    Compiler::compiler(bytecode, options, names)
}