Skip to main content

luaur_bytecode/records/
bc_cmp_proto.rs

1use core::marker::PhantomData;
2
3use luaur_common::enums::luau_opcode::LuauOpcode;
4
5use crate::methods::bc_function_as::BcInstType;
6use crate::methods::bc_inst_helper_create::BcInstHelperCreate;
7use crate::records::bc_function::VmConst;
8use crate::records::bc_inst_helper::BcInstHelper;
9use crate::records::bc_op::BcOp;
10
11#[derive(Debug)]
12pub struct BcCmpProto<'a, T = VmConst> {
13    pub(crate) base: BcInstHelper<'a>,
14    _marker: PhantomData<T>,
15}
16
17impl<'a, T> BcCmpProto<'a, T> {
18    pub fn create(graph: &'a mut crate::records::bc_function::BcFunction) -> Self {
19        Self {
20            base: BcInstHelper::create::<Self>(graph),
21            _marker: PhantomData,
22        }
23    }
24
25    pub fn set_closure(&mut self, value: BcOp) {
26        self.base.set_bc_op(0, value);
27    }
28
29    pub fn set_proto_id(&mut self, value: u32) {
30        self.base.set_imm_input(1, value as i32);
31    }
32
33    pub fn set_fallback(&mut self, value: BcOp) {
34        self.base.set_bc_op(2, value);
35    }
36
37    pub fn append_to(&mut self, block: BcOp) {
38        self.base.append_to(block);
39    }
40}
41
42impl<T> BcInstType for BcCmpProto<'_, T> {
43    const OPCODE: i32 = LuauOpcode::LOP_CMPPROTO as i32;
44}
45
46impl<T> BcInstHelperCreate for BcCmpProto<'_, T> {
47    const OPCODE: LuauOpcode = LuauOpcode::LOP_CMPPROTO;
48}