Skip to main content

luaur_analysis/methods/
cfg_builder_emit_join.rs

1use crate::methods::block_set_reaching_definition::block_set_reaching_definition;
2use crate::records::block::Block;
3use crate::records::cfg_builder::CfgBuilder;
4use crate::records::join::Join;
5use crate::records::symbol::Symbol;
6
7impl CfgBuilder {
8    /// `Join* CFGBuilder::emitJoin(Block* block, Symbol sym)`.
9    /// Reference: `ControlFlowGraph.cpp:258-265`.
10    pub fn emit_join(&mut self, block: *mut Block, sym: Symbol) -> *mut Join {
11        let def = self.new_definition(sym.clone());
12        let j: *mut Join = self.emit::<Join, _>(block, def);
13        let block_ref = unsafe { &mut *block };
14        block_set_reaching_definition(block_ref, sym, def);
15        self.incomplete_joins.get_or_insert(block).insert(j);
16        j
17    }
18}