1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum ConstantPrimary<'a> {
9 PrimaryLiteral(Box<PrimaryLiteral<'a>>),
10 PsParameter(Box<(PsParameterIdentifier<'a>, ConstantSelect<'a>)>),
11 Specparam(
12 Box<(
13 SpecparamIdentifier<'a>,
14 Option<(Metadata<'a>, ConstantRangeExpression<'a>, Metadata<'a>)>,
15 )>,
16 ),
17 Genvar(Box<GenvarIdentifier<'a>>),
18 FormalPort(Box<(FormalPortIdentifier<'a>, ConstantSelect<'a>)>),
19 Enum(Box<(Option<PackageOrClassScope<'a>>, EnumIdentifier<'a>)>),
20 EmptyUnpackedArrayConcatenation(Box<EmptyUnpackedArrayConcatenation<'a>>),
21 Concatenation(
22 Box<(
23 ConstantConcatenation<'a>,
24 Option<(Metadata<'a>, ConstantRangeExpression<'a>, Metadata<'a>)>,
25 )>,
26 ),
27 MultipleConcatenation(
28 Box<(
29 ConstantMultipleConcatenation<'a>,
30 Option<(Metadata<'a>, ConstantRangeExpression<'a>, Metadata<'a>)>,
31 )>,
32 ),
33 FunctionCall(
34 Box<(
35 ConstantFunctionCall<'a>,
36 Option<(Metadata<'a>, ConstantRangeExpression<'a>, Metadata<'a>)>,
37 )>,
38 ),
39 LetExpression(Box<ConstantLetExpression<'a>>),
40 MintypmaxExpression(
41 Box<(Metadata<'a>, ConstantMintypmaxExpression<'a>, Metadata<'a>)>,
42 ),
43 Cast(Box<ConstantCast<'a>>),
44 AssignmentPatternExpression(Box<ConstantAssignmentPatternExpression<'a>>),
45 TypeReference(Box<TypeReference<'a>>),
46 Null(Box<Metadata<'a>>),
47}
48
49#[derive(Clone, Debug, PartialEq)]
50pub enum ModulePathPrimary<'a> {
51 Number(Box<Number<'a>>),
52 Identifier(Box<Identifier<'a>>),
53 Concatenation(Box<ModulePathConcatenation<'a>>),
54 MultipleConcatenation(Box<ModulePathMultipleConcatenation<'a>>),
55 FunctionSubroutineCall(Box<FunctionSubroutineCall<'a>>),
56 MintypmaxExpression(
57 Box<(
58 Metadata<'a>,
59 ModulePathMintypmaxExpression<'a>,
60 Metadata<'a>,
61 )>,
62 ),
63}
64
65#[derive(Clone, Debug, PartialEq)]
66pub enum ClassQualifierOrPackageScope<'a> {
67 ClassQualifier(Box<ClassQualifier<'a>>),
68 PackageScope(Box<PackageScope<'a>>),
69}
70
71#[derive(Clone, Debug, PartialEq)]
72pub enum Primary<'a> {
73 PrimaryLiteral(Box<PrimaryLiteral<'a>>),
74 HierarchicalIdentifier(
75 Box<(
76 Option<ClassQualifierOrPackageScope<'a>>,
77 HierarchicalIdentifier<'a>,
78 Select<'a>,
79 )>,
80 ),
81 EmptyUnpackedArrayConcatenation(Box<EmptyUnpackedArrayConcatenation<'a>>),
82 Concatenation(
83 Box<(
84 Concatenation<'a>,
85 Option<(Metadata<'a>, RangeExpression<'a>, Metadata<'a>)>,
86 )>,
87 ),
88 MultipleConcatenation(
89 Box<(
90 MultipleConcatenation<'a>,
91 Option<(Metadata<'a>, RangeExpression<'a>, Metadata<'a>)>,
92 )>,
93 ),
94 FunctionSubroutineCall(
95 Box<(
96 FunctionSubroutineCall<'a>,
97 Option<(Metadata<'a>, RangeExpression<'a>, Metadata<'a>)>,
98 )>,
99 ),
100 LetExpression(Box<LetExpression<'a>>),
101 MintypmaxExpression(
102 Box<(Metadata<'a>, MintypmaxExpression<'a>, Metadata<'a>)>,
103 ),
104 Cast(Box<Cast<'a>>),
105 AssignmentPatternExpression(Box<AssignmentPatternExpression<'a>>),
106 StreamingConcatenation(Box<StreamingConcatenation<'a>>),
107 SequenceMethodCall(Box<SequenceMethodCall<'a>>),
108 This(Box<Metadata<'a>>),
109 Dollar(Box<Metadata<'a>>),
110 Null(Box<Metadata<'a>>),
111}
112
113#[derive(Clone, Debug, PartialEq)]
114pub enum ImplicitClassHandleOrClassScope<'a> {
115 ImplicitClassHandle(Box<(ImplicitClassHandle<'a>, Metadata<'a>)>),
116 ClassScope(Box<ClassScope<'a>>),
117}
118
119#[derive(Clone, Debug, PartialEq)]
120pub struct ClassQualifier<'a>(
121 pub Option<(
122 Metadata<'a>, Metadata<'a>, )>,
125 pub Option<ImplicitClassHandleOrClassScope<'a>>,
126);
127
128#[derive(Clone, Debug, PartialEq)]
129pub enum RangeExpression<'a> {
130 Expression(Box<Expression<'a>>),
131 PartSelectRange(Box<PartSelectRange<'a>>),
132}
133
134#[derive(Clone, Debug, PartialEq)]
135pub enum PrimaryLiteral<'a> {
136 Number(Box<Number<'a>>),
137 TimeLiteral(Box<TimeLiteral<'a>>),
138 UnbasedUnsizedLiteral(Box<UnbasedUnsizedLiteral<'a>>),
139 StringLiteral(Box<StringLiteral<'a>>),
140}
141
142#[derive(Clone, Debug, PartialEq)]
143pub enum TimeLiteral<'a> {
144 TimeLiteralUnsigned(Box<(UnsignedNumber<'a>, TimeUnit<'a>)>),
145 TimeLiteralFixedPoint(Box<(FixedPointNumber<'a>, TimeUnit<'a>)>),
146}
147
148#[derive(Clone, Debug, PartialEq)]
149pub enum TimeUnit<'a> {
150 S(Metadata<'a>),
151 MS(Metadata<'a>),
152 US(Metadata<'a>),
153 NS(Metadata<'a>),
154 PS(Metadata<'a>),
155 FS(Metadata<'a>),
156}
157
158#[derive(Clone, Debug, PartialEq)]
159pub enum ImplicitClassHandle<'a> {
160 This(Metadata<'a>),
161 Super(Metadata<'a>),
162 ThisSuper(Metadata<'a>, Metadata<'a>, Metadata<'a>),
163}
164
165#[derive(Clone, Debug, PartialEq)]
166pub struct BitSelect<'a>(
167 pub Vec<(
168 Metadata<'a>, Expression<'a>,
170 Metadata<'a>, )>,
172);
173
174#[derive(Clone, Debug, PartialEq)]
175pub struct Select<'a>(
176 pub Option<(
177 Vec<(
178 Metadata<'a>, MemberIdentifier<'a>,
180 BitSelect<'a>,
181 )>,
182 Metadata<'a>, MemberIdentifier<'a>,
184 )>,
185 pub BitSelect<'a>,
186 pub Option<(
187 Metadata<'a>, PartSelectRange<'a>,
189 Metadata<'a>, )>,
191);
192
193#[derive(Clone, Debug, PartialEq)]
194pub struct NonrangeSelect<'a>(
195 pub Option<(
196 Vec<(
197 Metadata<'a>, MemberIdentifier<'a>,
199 BitSelect<'a>,
200 )>,
201 Metadata<'a>, MemberIdentifier<'a>,
203 )>,
204 pub BitSelect<'a>,
205);
206
207#[derive(Clone, Debug, PartialEq)]
208pub struct ConstantBitSelect<'a>(
209 pub Vec<(
210 Metadata<'a>, ConstantExpression<'a>,
212 Metadata<'a>, )>,
214);
215
216#[derive(Clone, Debug, PartialEq)]
217pub struct ConstantSelect<'a>(
218 pub Option<(
219 Vec<(
220 Metadata<'a>, MemberIdentifier<'a>,
222 ConstantBitSelect<'a>,
223 )>,
224 Metadata<'a>, MemberIdentifier<'a>,
226 )>,
227 pub ConstantBitSelect<'a>,
228 pub Option<(
229 Metadata<'a>, ConstantPartSelectRange<'a>,
231 Metadata<'a>, )>,
233);
234
235#[derive(Clone, Debug, PartialEq)]
236pub struct Cast<'a>(
237 pub CastingType<'a>,
238 pub Metadata<'a>, pub Metadata<'a>, pub Expression<'a>,
241 pub Metadata<'a>, );
243
244#[derive(Clone, Debug, PartialEq)]
245pub struct ConstantCast<'a>(
246 pub CastingType<'a>,
247 pub Metadata<'a>, pub Metadata<'a>, pub ConstantExpression<'a>,
250 pub Metadata<'a>, );
252
253#[derive(Clone, Debug, PartialEq)]
254pub struct ConstantLetExpression<'a>(pub LetExpression<'a>);