use crate::r#type::common::{AddressSpace, AttributeDirective, DataLinkage, DataType};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ModuleVariableDirective {
Tex(VariableDirective),
Shared(VariableDirective),
Global(VariableDirective),
Const(VariableDirective),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VariableDirective {
pub address_space: Option<AddressSpace>,
pub attributes: Vec<AttributeDirective>,
pub ty: Option<DataType>,
pub modifiers: Vec<VariableModifier>,
pub name: String,
pub array: Vec<Option<u64>>,
pub initializer: Option<GlobalInitializer>,
pub raw: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VariableModifier {
Vector(u32),
Alignment(u32),
Linkage(DataLinkage),
Ptr,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NumericLiteral {
Signed(i64),
Unsigned(u64),
Float64(u64),
Float32(u32),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum InitializerValue {
Numeric(NumericLiteral),
Symbol(String),
StringLiteral(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GlobalInitializer {
Scalar(InitializerValue),
Aggregate(Vec<GlobalInitializer>),
}