luaur_analysis/methods/cfg_builder_new_block.rs
1//! Source: `Analysis/src/ControlFlowGraph.cpp:245-251` (hand-ported)
2//! C++ `Block* CFGBuilder::newBlock(BlockKind kind, std::string debugName, Block* pred)`.
3use crate::enums::block_kind::BlockKind;
4use crate::records::block::Block;
5use crate::records::cfg_builder::CfgBuilder;
6use alloc::string::String;
7
8impl CfgBuilder {
9 /// C++ default arg `Block* pred = nullptr`; callers pass `null_mut()` to omit.
10 pub fn new_block(
11 &mut self,
12 kind: BlockKind,
13 debug_name: String,
14 pred: *mut Block,
15 ) -> *mut Block {
16 // C++:
17 // Block* b = cfg->newBlock(kind, debugName);
18 // if (pred) pred->addSuccessor(b);
19 // return b;
20 let b = self.cfg.as_mut().unwrap().new_block(kind, debug_name);
21 if !pred.is_null() {
22 unsafe { (*pred).add_successor(b) };
23 }
24 b
25 }
26}