sv_parser_syntaxtree/expressions/
expressions.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[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}