CodeGenLib/x86/
var.rs

1use super::mem::AdressManager;
2
3/// The Variabel struct is the handler for variables
4#[derive(Clone)]
5pub struct Variabel {
6    pub size: u64,
7    pub name: String,
8    adrmng: AdressManager,
9
10    initalized: bool,
11}
12
13impl Variabel {
14    pub fn new(typ: VarDataType, name: &String, adrmng: & AdressManager) -> Self {
15        let size: u64 = match typ {
16            VarDataType::Custom(x) => x,
17            VarDataType::I16 => 2,
18            VarDataType::I32 => 4,
19            VarDataType::I64 => 8,
20            VarDataType::U16 => 2,
21            VarDataType::U32 => 4,
22            VarDataType::U64 => 8,
23        };
24
25        Self {
26            size: size,
27            name: name.to_string(),
28            adrmng: adrmng.to_owned(),
29            initalized: false,
30        }
31    }
32
33    /// Returns the adress of the variable
34    pub fn adr(&self) -> u64 {
35        self.adrmng.get_adr(&self.name) as u64
36    }
37
38    pub fn init(&mut self) {
39        if self.initalized {
40            self.adrmng.reg_var(&self.name, self.size);
41            self.initalized = false;
42        }
43    }
44}
45
46/// Size/type of the variabel
47pub enum VarDataType {
48    U16, I16,
49    U32, I32,
50    U64, I64,
51
52    Custom(u64),
53}