1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum IncOrDecExpression<'a> {
9 Preop(
10 Box<(
11 IncOrDecOperator<'a>,
12 Vec<AttributeInstance<'a>>,
13 VariableLvalue<'a>,
14 )>,
15 ),
16 Postop(
17 Box<(
18 VariableLvalue<'a>,
19 Vec<AttributeInstance<'a>>,
20 IncOrDecOperator<'a>,
21 )>,
22 ),
23}
24
25#[derive(Clone, Debug, PartialEq)]
26pub struct ConditionalExpression<'a>(
27 pub CondPredicate<'a>,
28 pub Metadata<'a>, pub Vec<AttributeInstance<'a>>,
30 pub Expression<'a>,
31 pub Metadata<'a>, pub Expression<'a>,
33);
34
35#[derive(Clone, Debug, PartialEq)]
36pub enum ConstantExpression<'a> {
37 Primary(Box<ConstantPrimary<'a>>),
38 Unary(
39 Box<(
40 UnaryOperator<'a>,
41 Vec<AttributeInstance<'a>>,
42 ConstantPrimary<'a>,
43 )>,
44 ),
45 Binary(
46 Box<(
47 ConstantExpression<'a>,
48 BinaryOperator<'a>,
49 Vec<AttributeInstance<'a>>,
50 ConstantExpression<'a>,
51 )>,
52 ),
53 Ternary(
54 Box<(
55 ConstantExpression<'a>,
56 Metadata<'a>, Vec<AttributeInstance<'a>>,
58 ConstantExpression<'a>,
59 Metadata<'a>, ConstantExpression<'a>,
61 )>,
62 ),
63}
64
65#[derive(Clone, Debug, PartialEq)]
66pub enum ConstantMintypmaxExpression<'a> {
67 Single(Box<ConstantExpression<'a>>),
68 Mintypmax(
69 Box<(
70 ConstantExpression<'a>,
71 Metadata<'a>,
72 ConstantExpression<'a>,
73 Metadata<'a>,
74 ConstantExpression<'a>,
75 )>,
76 ),
77}
78
79#[derive(Clone, Debug, PartialEq)]
80pub enum ConstantParamExpression<'a> {
81 Mintypmax(Box<ConstantMintypmaxExpression<'a>>),
82 Data(Box<DataType<'a>>),
83 Dollar(Box<Metadata<'a>>),
84}
85
86#[derive(Clone, Debug, PartialEq)]
87pub enum ParamExpression<'a> {
88 Mintypmax(Box<MintypmaxExpression<'a>>),
89 Data(Box<DataType<'a>>),
90 Dollar(Box<Metadata<'a>>),
91}
92
93#[derive(Clone, Debug, PartialEq)]
94pub enum ConstantRangeExpression<'a> {
95 Expression(Box<ConstantExpression<'a>>),
96 PartSelectRange(Box<ConstantPartSelectRange<'a>>),
97}
98
99#[derive(Clone, Debug, PartialEq)]
100pub enum ConstantPartSelectRange<'a> {
101 Range(Box<ConstantRange<'a>>),
102 IndexedRange(Box<ConstantIndexedRange<'a>>),
103}
104
105#[derive(Clone, Debug, PartialEq)]
106pub struct ConstantRange<'a>(
107 pub ConstantExpression<'a>,
108 pub Metadata<'a>, pub ConstantExpression<'a>,
110);
111
112#[derive(Clone, Debug, PartialEq)]
113pub enum ConstantIndexedRange<'a> {
114 Plus(
115 Box<(
116 ConstantExpression<'a>,
117 Metadata<'a>, ConstantExpression<'a>,
119 )>,
120 ),
121 Minus(
122 Box<(
123 ConstantExpression<'a>,
124 Metadata<'a>, ConstantExpression<'a>,
126 )>,
127 ),
128}
129
130#[derive(Clone, Debug, PartialEq)]
131pub enum Expression<'a> {
132 Primary(Box<Primary<'a>>),
133 Unary(Box<(UnaryOperator<'a>, Vec<AttributeInstance<'a>>, Primary<'a>)>),
134 IncOrDecExpression(Box<IncOrDecExpression<'a>>),
135 OperatorAssignment(
136 Box<(Metadata<'a>, OperatorAssignment<'a>, Metadata<'a>)>,
137 ),
138 Binary(
139 Box<(
140 Expression<'a>,
141 BinaryOperator<'a>,
142 Vec<AttributeInstance<'a>>,
143 Expression<'a>,
144 )>,
145 ),
146 ConditionalExpression(Box<ConditionalExpression<'a>>),
147 InsideExpression(Box<InsideExpression<'a>>),
148 TaggedUnionExpression(Box<TaggedUnionExpression<'a>>),
149}
150
151#[derive(Clone, Debug, PartialEq)]
152pub struct TaggedUnionExpression<'a>(
153 pub Metadata<'a>, pub MemberIdentifier<'a>,
155 pub Option<Primary<'a>>,
156);
157
158#[derive(Clone, Debug, PartialEq)]
159pub struct InsideExpression<'a>(
160 pub Expression<'a>,
161 pub Metadata<'a>, pub Metadata<'a>, pub RangeList<'a>,
164 pub Metadata<'a>, );
166
167#[derive(Clone, Debug, PartialEq)]
168pub enum MintypmaxExpression<'a> {
169 Single(Box<Expression<'a>>),
170 Mintypmax(
171 Box<(
172 Expression<'a>,
173 Metadata<'a>,
174 Expression<'a>,
175 Metadata<'a>,
176 Expression<'a>,
177 )>,
178 ),
179}
180
181#[derive(Clone, Debug, PartialEq)]
182pub struct ModulePathConditionalExpression<'a>(
183 pub ModulePathExpression<'a>,
184 pub Metadata<'a>, pub Vec<AttributeInstance<'a>>,
186 pub ModulePathExpression<'a>,
187 pub Metadata<'a>, pub ModulePathExpression<'a>,
189);
190
191#[derive(Clone, Debug, PartialEq)]
192pub enum ModulePathExpression<'a> {
193 Primary(Box<ModulePathPrimary<'a>>),
194 Unary(
195 Box<(
196 UnaryModulePathOperator<'a>,
197 Vec<AttributeInstance<'a>>,
198 ModulePathPrimary<'a>,
199 )>,
200 ),
201 Binary(
202 Box<(
203 ModulePathExpression<'a>,
204 BinaryModulePathOperator<'a>,
205 Vec<AttributeInstance<'a>>,
206 ModulePathExpression<'a>,
207 )>,
208 ),
209 Conditional(Box<ModulePathConditionalExpression<'a>>),
210}
211
212#[derive(Clone, Debug, PartialEq)]
213pub enum ModulePathMintypmaxExpression<'a> {
214 Single(Box<ModulePathExpression<'a>>),
215 Mintypmax(
216 Box<(
217 ModulePathExpression<'a>,
218 Metadata<'a>,
219 ModulePathExpression<'a>,
220 Metadata<'a>,
221 ModulePathExpression<'a>,
222 )>,
223 ),
224}
225
226#[derive(Clone, Debug, PartialEq)]
227pub enum PartSelectRange<'a> {
228 ConstantRange(Box<ConstantRange<'a>>),
229 IndexedRange(Box<IndexedRange<'a>>),
230}
231
232#[derive(Clone, Debug, PartialEq)]
233pub enum IndexedRange<'a> {
234 Plus(
235 Box<(
236 Expression<'a>,
237 Metadata<'a>, ConstantExpression<'a>,
239 )>,
240 ),
241 Minus(
242 Box<(
243 Expression<'a>,
244 Metadata<'a>, ConstantExpression<'a>,
246 )>,
247 ),
248}
249
250#[derive(Clone, Debug, PartialEq)]
251pub struct GenvarExpression<'a>(pub ConstantExpression<'a>);