ptx_parser/type/
variable.rs1use crate::r#type::common::{AddressSpace, AttributeDirective, DataLinkage, DataType};
2
3#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum ModuleVariableDirective {
6 Tex(VariableDirective),
7 Shared(VariableDirective),
8 Global(VariableDirective),
9 Const(VariableDirective),
10}
11
12#[derive(Debug, Clone, PartialEq, Eq)]
14pub struct VariableDirective {
15 pub address_space: Option<AddressSpace>,
16 pub attributes: Vec<AttributeDirective>,
17 pub ty: Option<DataType>,
18 pub modifiers: Vec<VariableModifier>,
19 pub name: String,
20 pub array: Vec<Option<u64>>,
21 pub initializer: Option<GlobalInitializer>,
22 pub raw: String,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq)]
27pub enum VariableModifier {
28 Vector(u32),
29 Alignment(u32),
30 Linkage(DataLinkage),
31 Ptr,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
36pub enum NumericLiteral {
37 Signed(i64),
38 Unsigned(u64),
39 Float64(u64),
40 Float32(u32),
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
45pub enum InitializerValue {
46 Numeric(NumericLiteral),
47 Symbol(String),
48 StringLiteral(String),
49}
50
51#[derive(Debug, Clone, PartialEq, Eq)]
53pub enum GlobalInitializer {
54 Scalar(InitializerValue),
55 Aggregate(Vec<GlobalInitializer>),
56}