use crate::instruction::InstructionInfo;
#[derive(Clone, Copy, PartialEq)]
pub struct Value(pub u32);
#[derive(Clone, Copy, PartialEq)]
pub struct Block(pub u32);
#[derive(Clone, PartialEq)]
pub struct Variable(pub String);
impl Variable {
pub fn named(&self) -> Named {
Named::new(self.0.to_string())
}
}
#[derive(Clone, PartialEq)]
pub struct GlobalVariable(pub String);
impl GlobalVariable {
pub fn named(&self) -> Named {
Named::new(self.0.to_string())
}
}
#[derive(Clone, PartialEq)]
pub enum Type {
Plain,
Array(isize),
Pointer,
}
#[derive(Clone, PartialEq)]
pub struct AbiType(pub String, pub Type);
#[derive(Clone, PartialEq)]
pub struct AbiParam(pub String, pub AbiType);
#[derive(Clone, PartialEq)]
pub enum NamedProperty {
Basic(String),
Static(String),
Pointer(String),
Index(Value),
}
#[derive(Clone, PartialEq)]
pub struct Named {
pub name: String,
pub properties: Vec<NamedProperty>
}
impl Named {
pub fn new(name: String) -> Self {
Self {
name,
properties: vec![]
}
}
pub fn new_props(name: String, properties: Vec<NamedProperty>) -> Self {
Self {
name,
properties
}
}
}
#[derive(Clone)]
pub enum ValueInfo {
IntegerConstant(u64),
FloatConstant(f64),
DoubleConstant(f64),
BooleanConstant(bool),
StringConstant(String),
CharConstant(String),
Named(Named),
Block(Block),
Instruction(InstructionInfo),
}