Skip to main content

luaur_code_gen/records/
fallback_stream_scope.rs

1use crate::enums::ir_cmd::IrCmd;
2use crate::enums::ir_op_kind::IrOpKind;
3use crate::records::ir_builder::IrBuilder;
4use crate::records::ir_op::IrOp;
5
6#[derive(Debug)]
7pub struct FallbackStreamScope<'a> {
8    pub(crate) build: &'a mut IrBuilder,
9    pub(crate) next: IrOp,
10}
11
12impl<'a> FallbackStreamScope<'a> {
13    pub fn new(build: &'a mut IrBuilder, fallback: IrOp, next: IrOp) -> Self {
14        luaur_common::LUAU_ASSERT!(fallback.kind() == IrOpKind::Block);
15        luaur_common::LUAU_ASSERT!(next.kind() == IrOpKind::Block);
16
17        build.inst_ir_cmd_ir_op(IrCmd::JUMP, next);
18        build.begin_block(fallback);
19
20        Self { build, next }
21    }
22}
23
24impl<'a> Drop for FallbackStreamScope<'a> {
25    fn drop(&mut self) {
26        self.build.begin_block(self.next);
27    }
28}