luaur_compiler/methods/
compiler_compiler.rs1use crate::records::builtin_ast_types::BuiltinAstTypes;
2use crate::records::compile_options::CompileOptions;
3use crate::records::compiler::Compiler;
4use luaur_ast::records::ast_local::AstLocal;
5use luaur_ast::records::ast_name::AstName;
6use luaur_ast::records::ast_name_table::AstNameTable;
7use luaur_ast::records::location::Location;
8use luaur_bytecode::records::bytecode_builder::BytecodeBuilder;
9use luaur_common::records::dense_hash_map::DenseHashMap;
10
11impl Compiler {
12 pub fn compiler(
13 bytecode: &mut BytecodeBuilder,
14 options: &CompileOptions,
15 names: &mut AstNameTable,
16 ) -> Compiler {
17 let export_name = names.get_or_add_c_str(c"__EXP".as_ptr());
18
19 let mut compiler = Compiler {
20 bytecode: bytecode as *mut BytecodeBuilder,
21 options: *options,
22 functions: DenseHashMap::new(core::ptr::null_mut()),
23 locals: DenseHashMap::new(core::ptr::null_mut()),
24 globals: DenseHashMap::new(AstName::default()),
25 variables: DenseHashMap::new(core::ptr::null_mut()),
26 constants: DenseHashMap::new(core::ptr::null_mut()),
27 locstants: DenseHashMap::new(core::ptr::null_mut()),
28 table_constants: DenseHashMap::new(core::ptr::null_mut()),
29 table_shapes: DenseHashMap::new(core::ptr::null_mut()),
30 builtins: DenseHashMap::new(core::ptr::null_mut()),
31 userdata_types: DenseHashMap::new(AstName::default()),
32 function_types: DenseHashMap::new(core::ptr::null_mut()),
33 local_types: DenseHashMap::new(core::ptr::null_mut()),
34 expr_types: DenseHashMap::new(core::ptr::null_mut()),
35 inline_builtins: DenseHashMap::new(core::ptr::null_mut()),
36 inline_builtins_backup: DenseHashMap::new(core::ptr::null_mut()),
37 expr_changes: Vec::new(),
38 local_changes: Vec::new(),
39 builtin_types: BuiltinAstTypes::new(options.vector_type),
40 names: names as *mut AstNameTable,
41 export_table_local: AstLocal::new(
42 export_name,
43 Location::default(),
44 core::ptr::null_mut(),
45 0,
46 0,
47 core::ptr::null_mut(),
48 true,
49 ),
50 builtins_fold: core::ptr::null(),
51 builtins_fold_library_k: false,
52 reg_top: 0,
53 stack_size: 0,
54 arg_count: 0,
55 has_loops: false,
56 current_function: core::ptr::null_mut(),
57 block_depth: 0,
58 getfenv_used: false,
59 setfenv_used: false,
60 local_stack: Vec::new(),
61 upvals: Vec::new(),
62 loop_jumps: Vec::new(),
63 loops: Vec::new(),
64 inline_frames: Vec::new(),
65 captures: Vec::new(),
66 exported_locals: Vec::new(),
67 exported_classes: Vec::new(),
68 };
69
70 compiler.local_stack.reserve(16);
71 compiler.upvals.reserve(16);
72 compiler
73 }
74}
75
76pub fn compiler_compiler(
77 bytecode: &mut BytecodeBuilder,
78 options: &CompileOptions,
79 names: &mut AstNameTable,
80) -> Compiler {
81 Compiler::compiler(bytecode, options, names)
82}