tower_vm/interpreter/
typeflag.rs1#[repr(u8)]
2#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
3pub enum TypeFlag {
4 I8 = 0,
5 I16 = 1,
6 I32 = 2,
7 I64 = 3,
8 F32 = 4,
9 F64 = 5,
10 Bool = 6,
11 Char = 7,
12 U8 = 8,
13 U16 = 9,
14 U32 = 10,
15 U64 = 11,
16}
17
18impl TypeFlag {
19 pub fn to_code(self) -> Vec<u8> {
20 vec![self.into()]
21 }
22}
23
24impl Into<u8> for TypeFlag {
25 fn into(self) -> u8 {
26 self as u8
27 }
28}
29
30impl Into<u64> for TypeFlag {
31 fn into(self) -> u64 {
32 self as u64
33 }
34}
35
36impl From<u8> for TypeFlag {
37 fn from(byte: u8) -> Self {
38 match byte {
39 0 => Self::I8,
40 1 => Self::I16,
41 2 => Self::I32,
42 3 => Self::I64,
43 4 => Self::F32,
44 5 => Self::F64,
45 6 => Self::Bool,
46 7 => Self::Char,
47 8 => Self::U8,
48 9 => Self::U16,
49 10 => Self::U32,
50 11 => Self::U64,
51 _ => panic!("bad typeflag: {}", byte),
52 }
53 }
54}
55
56impl TypeFlag {
57 pub fn size(self) -> usize {
58 match self {
59 Self::I8 => 1,
60 Self::I16 => 2,
61 Self::I32 => 4,
62 Self::I64 => 8,
63 Self::F32 => 4,
64 Self::F64 => 8,
65 Self::Bool => 1,
66 Self::Char => 4,
67 Self::U8 => 1,
68 Self::U16 => 2,
69 Self::U32 => 4,
70 Self::U64 => 8,
71 }
72 }
73}