1use super::*;
2
3#[derive(Debug, PartialEq, Clone)]
4pub enum Type {
5 Void,
6 Bool,
7 Char,
8 I8,
9 U8,
10 I16,
11 U16,
12 I32,
13 U32,
14 I64,
15 U64,
16 F32,
17 F64,
18 ISize,
19 USize,
20 String,
21 Object,
22 ClassName(TypeName), ValueName(TypeName), Array(Box<Self>), Generic(String, u16), RefMut(Box<Self>), RefConst(Box<Self>), PtrMut(Box<Self>, usize), PtrConst(Box<Self>, usize), ArrayFixed(Box<Self>, usize), }
32
33impl Type {
34 pub fn class_named(namespace: &str, name: &str) -> Self {
35 Self::ClassName(TypeName::named(namespace, name))
36 }
37
38 pub fn value_named(namespace: &str, name: &str) -> Self {
39 Self::ValueName(TypeName::named(namespace, name))
40 }
41
42 pub fn code(&self) -> u8 {
43 match self {
44 Self::Bool => ELEMENT_TYPE_BOOLEAN,
45 Self::U8 => ELEMENT_TYPE_U1,
46 Self::I8 => ELEMENT_TYPE_I1,
47 Self::U16 => ELEMENT_TYPE_U2,
48 Self::I16 => ELEMENT_TYPE_I2,
49 Self::U32 => ELEMENT_TYPE_U4,
50 Self::I32 => ELEMENT_TYPE_I4,
51 Self::U64 => ELEMENT_TYPE_U8,
52 Self::I64 => ELEMENT_TYPE_I8,
53 Self::USize => ELEMENT_TYPE_U,
54 Self::ISize => ELEMENT_TYPE_I,
55 Self::F32 => ELEMENT_TYPE_R4,
56 Self::F64 => ELEMENT_TYPE_R8,
57 Self::String => ELEMENT_TYPE_STRING,
58 rest => panic!("{rest:?}"),
59 }
60 }
61}