Skip to main content

luaur_analysis/methods/
data_flow_graph_builder_join_bindings.rs

1use crate::records::data_flow_graph_builder::DataFlowGraphBuilder;
2use crate::records::dfg_scope::DfgScope;
3
4impl DataFlowGraphBuilder {
5    pub fn join_bindings(&mut self, p: *mut DfgScope, a: &DfgScope, b: &DfgScope) {
6        unsafe {
7            for (sym, def1) in a.bindings.iter() {
8                if let Some(def2) = b.bindings.find(sym) {
9                    let phi = (*self.def_arena).phi_def_id_def_id(*def1, *def2);
10                    *(*p).bindings.get_or_insert(sym.clone()) = phi;
11                } else if let Some(def2) = (*p).lookup_symbol(sym.clone()) {
12                    let phi = (*self.def_arena).phi_def_id_def_id(*def1, def2);
13                    *(*p).bindings.get_or_insert(sym.clone()) = phi;
14                }
15            }
16
17            for (sym, def1) in b.bindings.iter() {
18                if let Some(def2) = (*p).lookup_symbol(sym.clone()) {
19                    let phi = (*self.def_arena).phi_def_id_def_id(*def1, def2);
20                    *(*p).bindings.get_or_insert(sym.clone()) = phi;
21                }
22            }
23        }
24    }
25}