Skip to main content

luaur_code_gen/methods/
ir_function_as_double_op.rs

1use crate::enums::ir_const_kind::IrConstKind;
2use crate::enums::ir_op_kind::IrOpKind;
3use crate::records::ir_function::IrFunction;
4use crate::records::ir_op::IrOp;
5
6impl IrFunction {
7    pub fn as_double_op(&mut self, op: IrOp) -> Option<f64> {
8        if op.kind() != IrOpKind::Constant {
9            return None;
10        }
11
12        let value = self.const_op(op);
13
14        if value.kind != IrConstKind::Double {
15            return None;
16        }
17
18        unsafe { Some(value.value.value_double) }
19    }
20}
21
22#[no_mangle]
23pub extern "C" fn ir_function_as_double_op() {}
24
25impl IrFunction {
26    pub fn const_op(&self, op: IrOp) -> crate::records::ir_const::IrConst {
27        self.constants[op.index() as usize]
28    }
29}