luaur_code_gen/records/
fallback_stream_scope.rs1use 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}