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