luaur_analysis/methods/
cfg_builder_lower_control_flow_graph_alt_c.rs1use crate::records::cfg_builder::CfgBuilder;
2use crate::records::declare::Declare;
3use crate::records::symbol::Symbol;
4use crate::type_aliases::def_id_control_flow_graph::DefId;
5use luaur_ast::records::ast_stat_local::AstStatLocal;
6
7impl CfgBuilder {
8 pub fn lower_ast_stat_local(&mut self, local: *mut AstStatLocal) {
9 unsafe {
10 let local_ref = &*local;
11 let vars_size = local_ref.vars.size;
12 let values_size = local_ref.values.size;
13
14 for i in 0..vars_size {
15 let loc = *local_ref.vars.data.add(i);
16 let expr = if i < values_size {
17 *local_ref.values.data.add(i)
18 } else {
19 core::ptr::null_mut()
20 };
21
22 if !expr.is_null() {
23 self.lower_expr_ast_expr(expr);
24 }
25
26 let sym = Symbol::from_local(loc);
32 let def: DefId = self.new_definition(sym.clone());
33 let current_block = self.current_block;
34 self.emit::<Declare, _>(current_block, (def, local));
35 (*current_block).set_reaching_definition(sym, def);
36 }
37 }
38 }
39}