Skip to main content

luaur_bytecode/methods/
bytecode_builder_add_constant_integer.rs

1use crate::enums::r#type::Type;
2use crate::records::bytecode_builder::BytecodeBuilder;
3use crate::records::constant::Constant;
4use crate::records::constant_key::ConstantKey;
5
6impl BytecodeBuilder {
7    pub fn add_constant_integer(&mut self, value: i64) -> i32 {
8        let mut c = Constant {
9            r#type: Type::Type_Integer,
10            value: unsafe { core::mem::zeroed() },
11        };
12        unsafe {
13            c.value.valueInteger64 = value;
14        }
15
16        let mut k = ConstantKey {
17            r#type: Type::Type_Integer,
18            value: 0,
19            extra: 0,
20        };
21
22        // static_assert(sizeof(k.value) == sizeof(value), "Expecting integer to be 64-bit");
23        // In Rust, k.value is u64 and value is i64, both are 8 bytes.
24        unsafe {
25            core::ptr::copy_nonoverlapping(
26                &value as *const i64 as *const u8,
27                &mut k.value as *mut u64 as *mut u8,
28                core::mem::size_of::<i64>(),
29            );
30        }
31
32        self.add_constant(k, c)
33    }
34}