Skip to main content

scarf_syntax/general/
identifiers.rs

1// =======================================================================
2// identifiers.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.9.3
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ArrayIdentifier<'a>(pub Identifier<'a>);
9
10#[derive(Clone, Debug, PartialEq)]
11pub struct BlockIdentifier<'a>(pub Identifier<'a>);
12
13#[derive(Clone, Debug, PartialEq)]
14pub struct BinIdentifier<'a>(pub Identifier<'a>);
15
16#[derive(Clone, Debug, PartialEq)]
17pub struct CIdentifier<'a>(pub &'a str, pub Metadata<'a>);
18
19#[derive(Clone, Debug, PartialEq)]
20pub struct CellIdentifier<'a>(pub Identifier<'a>);
21
22#[derive(Clone, Debug, PartialEq)]
23pub struct CheckerIdentifier<'a>(pub Identifier<'a>);
24
25#[derive(Clone, Debug, PartialEq)]
26pub struct ClassIdentifier<'a>(pub Identifier<'a>);
27
28#[derive(Clone, Debug, PartialEq)]
29pub struct ClassVariableIdentifier<'a>(pub VariableIdentifier<'a>);
30
31#[derive(Clone, Debug, PartialEq)]
32pub struct ClockingIdentifier<'a>(pub Identifier<'a>);
33
34#[derive(Clone, Debug, PartialEq)]
35pub struct ConfigIdentifier<'a>(pub Identifier<'a>);
36
37#[derive(Clone, Debug, PartialEq)]
38pub struct ConstIdentifier<'a>(pub Identifier<'a>);
39
40#[derive(Clone, Debug, PartialEq)]
41pub struct ConstraintIdentifier<'a>(pub Identifier<'a>);
42
43#[derive(Clone, Debug, PartialEq)]
44pub struct CovergroupIdentifier<'a>(pub Identifier<'a>);
45
46#[derive(Clone, Debug, PartialEq)]
47pub struct CovergroupVariableIdentifier<'a>(pub VariableIdentifier<'a>);
48
49#[derive(Clone, Debug, PartialEq)]
50pub struct CoverPointIdentifier<'a>(pub Identifier<'a>);
51
52#[derive(Clone, Debug, PartialEq)]
53pub struct CrossIdentifier<'a>(pub Identifier<'a>);
54
55#[derive(Clone, Debug, PartialEq)]
56pub struct DynamicArrayVariableIdentifier<'a>(pub VariableIdentifier<'a>);
57
58#[derive(Clone, Debug, PartialEq)]
59pub struct EnumIdentifier<'a>(pub Identifier<'a>);
60
61pub type EscapedIdentifier<'a> = (&'a str, Metadata<'a>);
62
63#[derive(Clone, Debug, PartialEq)]
64pub struct FormalIdentifier<'a>(pub Identifier<'a>);
65
66#[derive(Clone, Debug, PartialEq)]
67pub struct FormalPortIdentifier<'a>(pub Identifier<'a>);
68
69#[derive(Clone, Debug, PartialEq)]
70pub struct FunctionIdentifier<'a>(pub Identifier<'a>);
71
72#[derive(Clone, Debug, PartialEq)]
73pub struct GenerateBlockIdentifier<'a>(pub Identifier<'a>);
74
75#[derive(Clone, Debug, PartialEq)]
76pub struct GenvarIdentifier<'a>(pub Identifier<'a>);
77
78#[derive(Clone, Debug, PartialEq)]
79pub struct HierarchicalArrayIdentifier<'a>(pub HierarchicalIdentifier<'a>);
80
81#[derive(Clone, Debug, PartialEq)]
82pub struct HierarchicalBlockIdentifier<'a>(pub HierarchicalIdentifier<'a>);
83
84#[derive(Clone, Debug, PartialEq)]
85pub struct HierarchicalEventIdentifier<'a>(pub HierarchicalIdentifier<'a>);
86
87#[derive(Clone, Debug, PartialEq)]
88pub struct HierarchicalIdentifier<'a>(
89    pub Option<(Metadata<'a>, Metadata<'a>)>, // $root .
90    pub  Vec<(
91        Identifier<'a>,
92        ConstantBitSelect<'a>,
93        Metadata<'a>, // .
94    )>,
95    pub Identifier<'a>,
96);
97
98#[derive(Clone, Debug, PartialEq)]
99pub struct HierarchicalNetIdentifier<'a>(pub HierarchicalIdentifier<'a>);
100
101#[derive(Clone, Debug, PartialEq)]
102pub struct HierarchicalParameterIdentifier<'a>(pub HierarchicalIdentifier<'a>);
103
104#[derive(Clone, Debug, PartialEq)]
105pub struct HierarchicalPropertyIdentifier<'a>(pub HierarchicalIdentifier<'a>);
106
107#[derive(Clone, Debug, PartialEq)]
108pub struct HierarchicalSequenceIdentifier<'a>(pub HierarchicalIdentifier<'a>);
109
110#[derive(Clone, Debug, PartialEq)]
111pub struct HierarchicalTaskIdentifier<'a>(pub HierarchicalIdentifier<'a>);
112
113#[derive(Clone, Debug, PartialEq)]
114pub struct HierarchicalTfIdentifier<'a>(pub HierarchicalIdentifier<'a>);
115
116#[derive(Clone, Debug, PartialEq)]
117pub struct HierarchicalVariableIdentifier<'a>(pub HierarchicalIdentifier<'a>);
118
119#[derive(Clone, Debug, PartialEq)]
120pub enum Identifier<'a> {
121    SimpleIdentifier(SimpleIdentifier<'a>),
122    EscapedIdentifier(EscapedIdentifier<'a>),
123}
124
125#[derive(Clone, Debug, PartialEq)]
126pub struct IndexVariableIdentifier<'a>(pub Identifier<'a>);
127
128#[derive(Clone, Debug, PartialEq)]
129pub struct InterfaceIdentifier<'a>(pub Identifier<'a>);
130
131#[derive(Clone, Debug, PartialEq)]
132pub struct InterfacePortIdentifier<'a>(pub Identifier<'a>);
133
134#[derive(Clone, Debug, PartialEq)]
135pub struct InoutPortIdentifier<'a>(pub Identifier<'a>);
136
137#[derive(Clone, Debug, PartialEq)]
138pub struct InputPortIdentifier<'a>(pub Identifier<'a>);
139
140#[derive(Clone, Debug, PartialEq)]
141pub struct InstanceIdentifier<'a>(pub Identifier<'a>);
142
143#[derive(Clone, Debug, PartialEq)]
144pub struct LibraryIdentifier<'a>(pub Identifier<'a>);
145
146#[derive(Clone, Debug, PartialEq)]
147pub struct MemberIdentifier<'a>(pub Identifier<'a>);
148
149#[derive(Clone, Debug, PartialEq)]
150pub struct MethodIdentifier<'a>(pub Identifier<'a>);
151
152#[derive(Clone, Debug, PartialEq)]
153pub struct ModportIdentifier<'a>(pub Identifier<'a>);
154
155#[derive(Clone, Debug, PartialEq)]
156pub struct ModuleIdentifier<'a>(pub Identifier<'a>);
157
158#[derive(Clone, Debug, PartialEq)]
159pub struct NetIdentifier<'a>(pub Identifier<'a>);
160
161#[derive(Clone, Debug, PartialEq)]
162pub struct NettypeIdentifier<'a>(pub Identifier<'a>);
163
164#[derive(Clone, Debug, PartialEq)]
165pub struct OutputPortIdentifier<'a>(pub Identifier<'a>);
166
167#[derive(Clone, Debug, PartialEq)]
168pub struct PackageIdentifier<'a>(pub Identifier<'a>);
169
170#[derive(Clone, Debug, PartialEq)]
171pub enum PackageScope<'a> {
172    Identifier(Box<(PackageIdentifier<'a>, Metadata<'a>)>),
173    Unit(Box<(Metadata<'a>, Metadata<'a>)>),
174}
175
176#[derive(Clone, Debug, PartialEq)]
177pub struct ParameterIdentifier<'a>(pub Identifier<'a>);
178
179#[derive(Clone, Debug, PartialEq)]
180pub struct PortIdentifier<'a>(pub Identifier<'a>);
181
182#[derive(Clone, Debug, PartialEq)]
183pub struct ProgramIdentifier<'a>(pub Identifier<'a>);
184
185#[derive(Clone, Debug, PartialEq)]
186pub struct PropertyIdentifier<'a>(pub Identifier<'a>);
187
188#[derive(Clone, Debug, PartialEq)]
189pub struct PsClassIdentifier<'a>(
190    pub Option<PackageScope<'a>>,
191    pub ClassIdentifier<'a>,
192);
193
194#[derive(Clone, Debug, PartialEq)]
195pub struct PsCovergroupIdentifier<'a>(
196    pub Option<PackageScope<'a>>,
197    pub CovergroupIdentifier<'a>,
198);
199
200#[derive(Clone, Debug, PartialEq)]
201pub struct PsCheckerIdentifier<'a>(
202    pub Option<PackageScope<'a>>,
203    pub CheckerIdentifier<'a>,
204);
205
206#[derive(Clone, Debug, PartialEq)]
207pub struct PsIdentifier<'a>(pub Option<PackageScope<'a>>, pub Identifier<'a>);
208
209#[derive(Clone, Debug, PartialEq)]
210pub enum PsOrHierarchicalArrayIdentifierScope<'a> {
211    ImplicitClassHandle(ImplicitClassHandle<'a>, Metadata<'a>),
212    ClassScope(ClassScope<'a>),
213    PackageScope(PackageScope<'a>),
214}
215
216#[derive(Clone, Debug, PartialEq)]
217pub struct PsOrHierarchicalArrayIdentifier<'a>(
218    pub Option<PsOrHierarchicalArrayIdentifierScope<'a>>,
219    pub HierarchicalArrayIdentifier<'a>,
220);
221
222#[derive(Clone, Debug, PartialEq)]
223pub enum PsOrHierarchicalNetIdentifier<'a> {
224    PackageScope(Option<PackageScope<'a>>, NetIdentifier<'a>),
225    Hierarchical(HierarchicalNetIdentifier<'a>),
226}
227
228#[derive(Clone, Debug, PartialEq)]
229pub enum PsOrHierarchicalPropertyIdentifier<'a> {
230    PackageScope(Option<PackageScope<'a>>, PropertyIdentifier<'a>),
231    Hierarchical(HierarchicalPropertyIdentifier<'a>),
232}
233
234#[derive(Clone, Debug, PartialEq)]
235pub enum PsOrHierarchicalSequenceIdentifier<'a> {
236    PackageScope(Option<PackageScope<'a>>, SequenceIdentifier<'a>),
237    Hierarchical(HierarchicalSequenceIdentifier<'a>),
238}
239
240#[derive(Clone, Debug, PartialEq)]
241pub enum PsOrHierarchicalTfIdentifier<'a> {
242    PackageScope(Option<PackageScope<'a>>, TfIdentifier<'a>),
243    Hierarchical(HierarchicalTfIdentifier<'a>),
244}
245
246#[derive(Clone, Debug, PartialEq)]
247pub enum PackageOrClassScope<'a> {
248    ClassScope(ClassScope<'a>),
249    PackageScope(PackageScope<'a>),
250}
251
252#[derive(Clone, Debug, PartialEq)]
253pub enum PsParameterIdentifier<'a> {
254    Scoped(Option<PackageOrClassScope<'a>>, ParameterIdentifier<'a>),
255    Generated(
256        Vec<(
257            GenerateBlockIdentifier<'a>,
258            Option<(Metadata<'a>, ConstantExpression<'a>, Metadata<'a>)>,
259            Metadata<'a>, // .
260        )>,
261        ParameterIdentifier<'a>,
262    ),
263}
264
265#[derive(Clone, Debug, PartialEq)]
266pub enum PsTypeIdentifierScope<'a> {
267    LocalScope(Metadata<'a>, Metadata<'a>),
268    ClassScope(ClassScope<'a>),
269    PackageScope(PackageScope<'a>),
270}
271
272#[derive(Clone, Debug, PartialEq)]
273pub struct PsTypeIdentifier<'a>(
274    pub Option<PsTypeIdentifierScope<'a>>,
275    pub TypeIdentifier<'a>,
276);
277
278#[derive(Clone, Debug, PartialEq)]
279pub struct RsProductionIdentifier<'a>(pub Identifier<'a>);
280
281#[derive(Clone, Debug, PartialEq)]
282pub struct SequenceIdentifier<'a>(pub Identifier<'a>);
283
284#[derive(Clone, Debug, PartialEq)]
285pub struct SignalIdentifier<'a>(pub Identifier<'a>);
286
287pub type SimpleIdentifier<'a> = (&'a str, Metadata<'a>);
288
289#[derive(Clone, Debug, PartialEq)]
290pub struct SpecparamIdentifier<'a>(pub Identifier<'a>);
291
292#[derive(Clone, Debug, PartialEq)]
293pub struct SystemTfIdentifier<'a>(pub &'a str, pub Metadata<'a>);
294
295#[derive(Clone, Debug, PartialEq)]
296pub struct TaskIdentifier<'a>(pub Identifier<'a>);
297
298#[derive(Clone, Debug, PartialEq)]
299pub struct TfIdentifier<'a>(pub Identifier<'a>);
300
301#[derive(Clone, Debug, PartialEq)]
302pub struct TerminalIdentifier<'a>(pub Identifier<'a>);
303
304#[derive(Clone, Debug, PartialEq)]
305pub struct TopmoduleIdentifier<'a>(pub Identifier<'a>);
306
307#[derive(Clone, Debug, PartialEq)]
308pub struct TypeIdentifier<'a>(pub Identifier<'a>);
309
310#[derive(Clone, Debug, PartialEq)]
311pub struct UdpIdentifier<'a>(pub Identifier<'a>);
312
313#[derive(Clone, Debug, PartialEq)]
314pub struct VariableIdentifier<'a>(pub Identifier<'a>);