1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct SourceText<'a>(
9 pub Vec<NonTriviaToken<'a>>, pub Option<TimeunitsDeclaration<'a>>,
11 pub Vec<Description<'a>>,
12);
13
14#[derive(Clone, Debug, PartialEq)]
15pub enum Description<'a> {
16 ModuleDeclaration(Box<ModuleDeclaration<'a>>),
17 UdpDeclaration(Box<UdpDeclaration<'a>>),
18 InterfaceDeclaration(Box<InterfaceDeclaration<'a>>),
19 ProgramDeclaration(Box<ProgramDeclaration<'a>>),
20 PackageDeclaration(Box<PackageDeclaration<'a>>),
21 DescriptionPackageItem(Box<DescriptionPackageItem<'a>>),
22 DescriptionBindDirective(Box<DescriptionBindDirective<'a>>),
23 ConfigDeclaration(Box<ConfigDeclaration<'a>>),
24}
25
26#[derive(Clone, Debug, PartialEq)]
27pub struct DescriptionPackageItem<'a>(
28 pub Vec<AttributeInstance<'a>>,
29 pub PackageItem<'a>,
30);
31
32#[derive(Clone, Debug, PartialEq)]
33pub struct DescriptionBindDirective<'a>(
34 pub Vec<AttributeInstance<'a>>,
35 pub BindDirective<'a>,
36);
37
38#[derive(Clone, Debug, PartialEq)]
39pub struct ModuleNonansiHeader<'a>(
40 pub Vec<AttributeInstance<'a>>,
41 pub ModuleKeyword<'a>,
42 pub Option<Lifetime<'a>>,
43 pub ModuleIdentifier<'a>,
44 pub Vec<PackageImportDeclaration<'a>>,
45 pub Option<ParameterPortList<'a>>,
46 pub ListOfPorts<'a>,
47 pub Metadata<'a>, );
49
50#[derive(Clone, Debug, PartialEq)]
51pub struct ModuleAnsiHeader<'a>(
52 pub Vec<AttributeInstance<'a>>,
53 pub ModuleKeyword<'a>,
54 pub Option<Lifetime<'a>>,
55 pub ModuleIdentifier<'a>,
56 pub Vec<PackageImportDeclaration<'a>>,
57 pub Option<ParameterPortList<'a>>,
58 pub Option<ListOfPortDeclarations<'a>>,
59 pub Metadata<'a>, );
61
62#[derive(Clone, Debug, PartialEq)]
63pub enum ModuleDeclaration<'a> {
64 Nonansi(Box<ModuleDeclarationNonansi<'a>>),
65 Ansi(Box<ModuleDeclarationAnsi<'a>>),
66 Wildcard(Box<ModuleDeclarationWildcard<'a>>),
67 ExternNonansi(Box<ModuleDeclarationExternNonansi<'a>>),
68 ExternAnsi(Box<ModuleDeclarationExternAnsi<'a>>),
69}
70
71#[derive(Clone, Debug, PartialEq)]
72pub struct ModuleDeclarationNonansi<'a>(
73 pub ModuleNonansiHeader<'a>,
74 pub Option<TimeunitsDeclaration<'a>>,
75 pub Vec<ModuleItem<'a>>,
76 pub Metadata<'a>,
77 pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
78);
79
80#[derive(Clone, Debug, PartialEq)]
81pub struct ModuleDeclarationAnsi<'a>(
82 pub ModuleAnsiHeader<'a>,
83 pub Option<TimeunitsDeclaration<'a>>,
84 pub Vec<NonPortModuleItem<'a>>,
85 pub Metadata<'a>,
86 pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
87);
88
89#[derive(Clone, Debug, PartialEq)]
90pub struct ModuleDeclarationWildcard<'a>(
91 pub Vec<AttributeInstance<'a>>,
92 pub ModuleKeyword<'a>,
93 pub Option<Lifetime<'a>>,
94 pub ModuleIdentifier<'a>,
95 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
101 pub Vec<ModuleItem<'a>>,
102 pub Metadata<'a>, pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
104);
105
106#[derive(Clone, Debug, PartialEq)]
107pub struct ModuleDeclarationExternNonansi<'a>(
108 pub Metadata<'a>,
109 pub ModuleNonansiHeader<'a>,
110);
111
112#[derive(Clone, Debug, PartialEq)]
113pub struct ModuleDeclarationExternAnsi<'a>(
114 pub Metadata<'a>,
115 pub ModuleAnsiHeader<'a>,
116);
117
118#[derive(Clone, Debug, PartialEq)]
119pub enum ModuleKeyword<'a> {
120 Module(Metadata<'a>),
121 Macromodule(Metadata<'a>),
122}
123
124#[derive(Clone, Debug, PartialEq)]
125pub enum InterfaceDeclaration<'a> {
126 Nonansi(Box<InterfaceDeclarationNonansi<'a>>),
127 Ansi(Box<InterfaceDeclarationAnsi<'a>>),
128 Wildcard(Box<InterfaceDeclarationWildcard<'a>>),
129 ExternNonansi(Box<InterfaceDeclarationExternNonansi<'a>>),
130 ExternAnsi(Box<InterfaceDeclarationExternAnsi<'a>>),
131}
132
133#[derive(Clone, Debug, PartialEq)]
134pub struct InterfaceDeclarationNonansi<'a>(
135 pub InterfaceNonansiHeader<'a>,
136 pub Option<TimeunitsDeclaration<'a>>,
137 pub Vec<InterfaceItem<'a>>,
138 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
140);
141
142#[derive(Clone, Debug, PartialEq)]
143pub struct InterfaceDeclarationAnsi<'a>(
144 pub InterfaceAnsiHeader<'a>,
145 pub Option<TimeunitsDeclaration<'a>>,
146 pub Vec<NonPortInterfaceItem<'a>>,
147 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
149);
150
151#[derive(Clone, Debug, PartialEq)]
152pub struct InterfaceDeclarationWildcard<'a>(
153 pub Vec<AttributeInstance<'a>>,
154 pub Metadata<'a>, pub InterfaceIdentifier<'a>,
156 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
162 pub Vec<InterfaceItem<'a>>,
163 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
165);
166
167#[derive(Clone, Debug, PartialEq)]
168pub struct InterfaceDeclarationExternNonansi<'a>(
169 pub Metadata<'a>,
170 pub InterfaceNonansiHeader<'a>,
171);
172
173#[derive(Clone, Debug, PartialEq)]
174pub struct InterfaceDeclarationExternAnsi<'a>(
175 pub Metadata<'a>,
176 pub InterfaceAnsiHeader<'a>,
177);
178
179#[derive(Clone, Debug, PartialEq)]
180pub struct InterfaceNonansiHeader<'a>(
181 pub Vec<AttributeInstance<'a>>,
182 pub Metadata<'a>, pub Option<Lifetime<'a>>,
184 pub InterfaceIdentifier<'a>,
185 pub Vec<PackageImportDeclaration<'a>>,
186 pub Option<ParameterPortList<'a>>,
187 pub ListOfPorts<'a>,
188 pub Metadata<'a>, );
190
191#[derive(Clone, Debug, PartialEq)]
192pub struct InterfaceAnsiHeader<'a>(
193 pub Vec<AttributeInstance<'a>>,
194 pub Metadata<'a>, pub Option<Lifetime<'a>>,
196 pub InterfaceIdentifier<'a>,
197 pub Vec<PackageImportDeclaration<'a>>,
198 pub Option<ParameterPortList<'a>>,
199 pub Option<ListOfPortDeclarations<'a>>,
200 pub Metadata<'a>, );
202
203#[derive(Clone, Debug, PartialEq)]
204pub enum ProgramDeclaration<'a> {
205 Nonansi(Box<ProgramDeclarationNonansi<'a>>),
206 Ansi(Box<ProgramDeclarationAnsi<'a>>),
207 Wildcard(Box<ProgramDeclarationWildcard<'a>>),
208 ExternNonansi(Box<ProgramDeclarationExternNonansi<'a>>),
209 ExternAnsi(Box<ProgramDeclarationExternAnsi<'a>>),
210}
211
212#[derive(Clone, Debug, PartialEq)]
213pub struct ProgramDeclarationNonansi<'a>(
214 pub ProgramNonansiHeader<'a>,
215 pub Option<TimeunitsDeclaration<'a>>,
216 pub Vec<ProgramItem<'a>>,
217 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
219);
220
221#[derive(Clone, Debug, PartialEq)]
222pub struct ProgramDeclarationAnsi<'a>(
223 pub ProgramAnsiHeader<'a>,
224 pub Option<TimeunitsDeclaration<'a>>,
225 pub Vec<NonPortProgramItem<'a>>,
226 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
228);
229
230#[derive(Clone, Debug, PartialEq)]
231pub struct ProgramDeclarationWildcard<'a>(
232 pub Vec<AttributeInstance<'a>>,
233 pub Metadata<'a>, pub ProgramIdentifier<'a>,
235 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
241 pub Vec<ProgramItem<'a>>,
242 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
244);
245
246#[derive(Clone, Debug, PartialEq)]
247pub struct ProgramDeclarationExternNonansi<'a>(
248 pub Metadata<'a>,
249 pub ProgramNonansiHeader<'a>,
250);
251
252#[derive(Clone, Debug, PartialEq)]
253pub struct ProgramDeclarationExternAnsi<'a>(
254 pub Metadata<'a>,
255 pub ProgramAnsiHeader<'a>,
256);
257
258#[derive(Clone, Debug, PartialEq)]
259pub struct ProgramNonansiHeader<'a>(
260 pub Vec<AttributeInstance<'a>>,
261 pub Metadata<'a>, pub Option<Lifetime<'a>>,
263 pub ProgramIdentifier<'a>,
264 pub Vec<PackageImportDeclaration<'a>>,
265 pub Option<ParameterPortList<'a>>,
266 pub ListOfPorts<'a>,
267 pub Metadata<'a>, );
269
270#[derive(Clone, Debug, PartialEq)]
271pub struct ProgramAnsiHeader<'a>(
272 pub Vec<AttributeInstance<'a>>,
273 pub Metadata<'a>, pub Option<Lifetime<'a>>,
275 pub ProgramIdentifier<'a>,
276 pub Vec<PackageImportDeclaration<'a>>,
277 pub Option<ParameterPortList<'a>>,
278 pub Option<ListOfPortDeclarations<'a>>,
279 pub Metadata<'a>, );
281
282#[derive(Clone, Debug, PartialEq)]
283pub struct CheckerDeclaration<'a>(
284 pub Metadata<'a>, pub CheckerIdentifier<'a>,
286 pub Option<(Metadata<'a>, CheckerPortList<'a>, Metadata<'a>)>,
287 pub Metadata<'a>,
288 pub Vec<(Vec<AttributeInstance<'a>>, CheckerOrGenerateItem<'a>)>,
289 pub Metadata<'a>, pub Option<(Metadata<'a>, CheckerIdentifier<'a>)>,
291);
292
293#[derive(Clone, Debug, PartialEq)]
294pub struct ClassDeclaration<'a>(
295 pub Option<Metadata<'a>>, pub Metadata<'a>, pub Option<FinalSpecifier<'a>>,
298 pub ClassIdentifier<'a>,
299 pub Option<ParameterPortList<'a>>,
300 pub Option<(
301 Metadata<'a>, ClassType<'a>,
303 Option<(
304 Metadata<'a>, ClassDeclarationExtensionArguments<'a>,
306 Metadata<'a>, )>,
308 )>,
309 pub Option<(
310 Metadata<'a>, InterfaceClassType<'a>,
312 Vec<(Metadata<'a>, InterfaceClassType<'a>)>,
313 )>,
314 pub Metadata<'a>, pub Vec<ClassItem<'a>>,
316 pub Metadata<'a>, pub Option<(Metadata<'a>, ClassIdentifier<'a>)>,
318);
319
320#[derive(Clone, Debug, PartialEq)]
321pub enum ClassDeclarationExtensionArguments<'a> {
322 ListOfArguments(Box<ListOfArguments<'a>>),
323 Default(Metadata<'a>),
324}
325
326#[derive(Clone, Debug, PartialEq)]
327pub struct InterfaceClassDeclaration<'a>(
328 pub Metadata<'a>, pub Metadata<'a>, pub ClassIdentifier<'a>,
331 pub Option<ParameterPortList<'a>>,
332 pub Option<(
333 Metadata<'a>, InterfaceClassType<'a>,
335 Vec<(Metadata<'a>, InterfaceClassType<'a>)>,
336 )>,
337 pub Metadata<'a>, pub Vec<InterfaceClassItem<'a>>,
339 pub Metadata<'a>, pub Option<(Metadata<'a>, ClassIdentifier<'a>)>,
341);
342
343#[derive(Clone, Debug, PartialEq)]
344pub struct PackageDeclaration<'a>(
345 pub Vec<AttributeInstance<'a>>,
346 pub Metadata<'a>, pub Option<Lifetime<'a>>,
348 pub PackageIdentifier<'a>,
349 pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
351 pub Vec<(Vec<AttributeInstance<'a>>, PackageItem<'a>)>,
352 pub Metadata<'a>, pub Option<(Metadata<'a>, PackageIdentifier<'a>)>,
354);
355
356#[derive(Clone, Debug, PartialEq)]
357pub enum TimeunitsDeclaration<'a> {
358 Timeunit(
359 Metadata<'a>, TimeLiteral<'a>,
361 Option<(Metadata<'a>, TimeLiteral<'a>)>,
362 Metadata<'a>, ),
364 Timeprecision(
365 Metadata<'a>, TimeLiteral<'a>,
367 Metadata<'a>, ),
369 Timeunitprecision(
370 Metadata<'a>, TimeLiteral<'a>,
372 Metadata<'a>, Metadata<'a>, TimeLiteral<'a>,
375 Metadata<'a>, ),
377 Timeprecisionunit(
378 Metadata<'a>, TimeLiteral<'a>,
380 Metadata<'a>, Metadata<'a>, TimeLiteral<'a>,
383 Metadata<'a>, ),
385}