luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_cmd::IrCmd;
use crate::enums::ir_op_kind::IrOpKind;
use crate::records::ir_builder::IrBuilder;
use crate::records::ir_op::IrOp;

#[derive(Debug)]
pub struct FallbackStreamScope<'a> {
    pub(crate) build: &'a mut IrBuilder,
    pub(crate) next: IrOp,
}

impl<'a> FallbackStreamScope<'a> {
    pub fn new(build: &'a mut IrBuilder, fallback: IrOp, next: IrOp) -> Self {
        luaur_common::LUAU_ASSERT!(fallback.kind() == IrOpKind::Block);
        luaur_common::LUAU_ASSERT!(next.kind() == IrOpKind::Block);

        build.inst_ir_cmd_ir_op(IrCmd::JUMP, next);
        build.begin_block(fallback);

        Self { build, next }
    }
}

impl<'a> Drop for FallbackStreamScope<'a> {
    fn drop(&mut self) {
        self.build.begin_block(self.next);
    }
}