ptx_parser/type/
variable.rs1use crate::Spanned;
2use crate::parser::Span;
3use crate::r#type::common::{AttributeDirective, DataType};
4use crate::r#type::{FunctionSymbol, Immediate, VariableSymbol};
5
6#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
8pub enum ModuleVariableDirective {
9 Tex {
14 directive: VariableDirective,
15 span: Span,
16 },
17 Shared {
18 directive: VariableDirective,
19 span: Span,
20 },
21 Global {
22 directive: VariableDirective,
23 span: Span,
24 },
25 Const {
26 directive: VariableDirective,
27 span: Span,
28 },
29}
30
31#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
33pub struct VariableDirective {
34 pub attributes: Vec<AttributeDirective>,
39 pub modifiers: Vec<VariableModifier>,
41 pub ty: DataType,
43 pub name: VariableSymbol,
45 pub array_dims: Vec<Option<u64>>,
49 pub initializer: Option<GlobalInitializer>,
51 pub span: Span,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
56pub enum VariableModifier {
57 Vector { value: u32, span: Span },
58 Alignment { value: u32, span: Span },
59 Ptr { span: Span },
60}
61
62#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
64pub enum ParameterDirective {
65 Register {
66 ty: DataType,
67 name: VariableSymbol,
68 span: Span,
69 },
70 Parameter {
71 align: Option<u32>,
72 ptr: bool,
73 space: Option<ParamStateSpace>,
74 ty: DataType,
75 name: VariableSymbol,
76 array: Vec<Option<u64>>,
77 span: Span,
78 },
79}
80
81#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
83pub enum ParamStateSpace {
84 Const { span: Span },
86 Global { span: Span },
88 Local { span: Span },
90 Shared { span: Span },
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
96pub enum InitializerValue {
97 NumericLiteral { value: Immediate, span: Span },
98 FunctionSymbol { name: FunctionSymbol, span: Span },
99 StringLiteral { value: String, span: Span },
100}
101
102#[derive(Debug, Clone, PartialEq, Eq, Spanned)]
104pub enum GlobalInitializer {
105 Scalar {
106 value: InitializerValue,
107 span: Span,
108 },
109 Aggregate {
110 values: Vec<GlobalInitializer>,
111 span: Span,
112 },
113}