Skip to main content

scarf_syntax/expressions/
primaries.rs

1// =======================================================================
2// primaries.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.8.4
5use 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>, // local
123        Metadata<'a>, // ::
124    )>,
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>, // [
169        Expression<'a>,
170        Metadata<'a>, // ]
171    )>,
172);
173
174#[derive(Clone, Debug, PartialEq)]
175pub struct Select<'a>(
176    pub  Option<(
177        Vec<(
178            Metadata<'a>, // .
179            MemberIdentifier<'a>,
180            BitSelect<'a>,
181        )>,
182        Metadata<'a>, // .
183        MemberIdentifier<'a>,
184    )>,
185    pub BitSelect<'a>,
186    pub  Option<(
187        Metadata<'a>, // [
188        PartSelectRange<'a>,
189        Metadata<'a>, // ]
190    )>,
191);
192
193#[derive(Clone, Debug, PartialEq)]
194pub struct NonrangeSelect<'a>(
195    pub  Option<(
196        Vec<(
197            Metadata<'a>, // .
198            MemberIdentifier<'a>,
199            BitSelect<'a>,
200        )>,
201        Metadata<'a>, // .
202        MemberIdentifier<'a>,
203    )>,
204    pub BitSelect<'a>,
205);
206
207#[derive(Clone, Debug, PartialEq)]
208pub struct ConstantBitSelect<'a>(
209    pub  Vec<(
210        Metadata<'a>, // [
211        ConstantExpression<'a>,
212        Metadata<'a>, // ]
213    )>,
214);
215
216#[derive(Clone, Debug, PartialEq)]
217pub struct ConstantSelect<'a>(
218    pub  Option<(
219        Vec<(
220            Metadata<'a>, // .
221            MemberIdentifier<'a>,
222            ConstantBitSelect<'a>,
223        )>,
224        Metadata<'a>, // .
225        MemberIdentifier<'a>,
226    )>,
227    pub ConstantBitSelect<'a>,
228    pub  Option<(
229        Metadata<'a>, // [
230        ConstantPartSelectRange<'a>,
231        Metadata<'a>, // ]
232    )>,
233);
234
235#[derive(Clone, Debug, PartialEq)]
236pub struct Cast<'a>(
237    pub CastingType<'a>,
238    pub Metadata<'a>, // '
239    pub Metadata<'a>, // (
240    pub Expression<'a>,
241    pub Metadata<'a>, // )
242);
243
244#[derive(Clone, Debug, PartialEq)]
245pub struct ConstantCast<'a>(
246    pub CastingType<'a>,
247    pub Metadata<'a>, // '
248    pub Metadata<'a>, // (
249    pub ConstantExpression<'a>,
250    pub Metadata<'a>, // )
251);
252
253#[derive(Clone, Debug, PartialEq)]
254pub struct ConstantLetExpression<'a>(pub LetExpression<'a>);