Skip to main content

luaur_code_gen/methods/
ir_builder_block.rs

1use crate::enums::ir_block_kind::IrBlockKind;
2use crate::enums::ir_op_kind::IrOpKind;
3use crate::macros::codegen_assert::CODEGEN_ASSERT;
4use crate::records::ir_block::IrBlock;
5use crate::records::ir_builder::IrBuilder;
6use crate::records::ir_op::IrOp;
7
8impl IrBuilder {
9    pub fn block(&mut self, mut kind: IrBlockKind) -> IrOp {
10        CODEGEN_ASSERT!(kind != IrBlockKind::Fallback);
11
12        if kind == IrBlockKind::Internal && self.active_fastcall_fallback {
13            kind = IrBlockKind::Fallback;
14        }
15
16        let index = self.function.blocks.len() as u32;
17        self.function.blocks.push(IrBlock {
18            kind,
19            flags: 0,
20            use_count: 0,
21            start: !0u32,
22            finish: !0u32,
23            sortkey: 0,
24            chainkey: 0,
25            expected_next_block: !0u32,
26            startpc: !0u32,
27            label: crate::records::label::Label::default(),
28        });
29        IrOp::ir_op_ir_op_kind_u32(IrOpKind::Block, index)
30    }
31}