Skip to main content

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}