1use crate::*;
7
8#[derive(Clone, Debug, PartialEq)]
9pub struct SourceText<'a>(
10 pub Vec<(ExtraNode<'a>, Span)>, pub Option<TimeunitsDeclaration<'a>>,
12 pub Vec<Description<'a>>,
13);
14
15#[derive(Clone, Debug, PartialEq)]
16pub enum Description<'a> {
17 ModuleDeclaration(Box<ModuleDeclaration<'a>>),
18 UdpDeclaration(Box<UdpDeclaration>),
19 InterfaceDeclaration(Box<InterfaceDeclaration<'a>>),
20 ProgramDeclaration(Box<ProgramDeclaration<'a>>),
21 PackageDeclaration(Box<PackageDeclaration<'a>>),
22 DescriptionPackageItem(Box<DescriptionPackageItem<'a>>),
23 DescriptionBindDirective(Box<DescriptionBindDirective<'a>>),
24 ConfigDeclaration(Box<ConfigDeclaration>),
25}
26
27#[derive(Clone, Debug, PartialEq)]
28pub struct DescriptionPackageItem<'a>(pub Vec<AttributeInstance<'a>>, pub PackageItem);
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct DescriptionBindDirective<'a>(pub Vec<AttributeInstance<'a>>, pub BindDirective);
32
33#[derive(Clone, Debug, PartialEq)]
34pub struct ModuleNonansiHeader<'a>(
35 pub Vec<AttributeInstance<'a>>,
36 pub ModuleKeyword<'a>,
37 pub Option<Lifetime<'a>>,
38 pub ModuleIdentifier<'a>,
39 pub Vec<PackageImportDeclaration>,
40 pub Option<ParameterPortList<'a>>,
41 pub ListOfPorts<'a>,
42 pub Metadata<'a>, );
44
45#[derive(Clone, Debug, PartialEq)]
46pub struct ModuleAnsiHeader<'a>(
47 pub Vec<AttributeInstance<'a>>,
48 pub ModuleKeyword<'a>,
49 pub Option<Lifetime<'a>>,
50 pub ModuleIdentifier<'a>,
51 pub Vec<PackageImportDeclaration>,
52 pub Option<ParameterPortList<'a>>,
53 pub Option<ListOfPortDeclarations<'a>>,
54 pub Metadata<'a>, );
56
57#[derive(Clone, Debug, PartialEq)]
58pub enum ModuleDeclaration<'a> {
59 ModuleDeclarationNonansi(Box<ModuleDeclarationNonansi<'a>>),
60 ModuleDeclarationAnsi(Box<ModuleDeclarationAnsi<'a>>),
61 ModuleDeclarationWildcard(Box<ModuleDeclarationWildcard<'a>>),
62 ModuleDeclarationExternNonansi(Box<ModuleDeclarationExternNonansi<'a>>),
63 ModuleDeclarationExternAnsi(Box<ModuleDeclarationExternAnsi<'a>>),
64}
65
66#[derive(Clone, Debug, PartialEq)]
67pub struct ModuleDeclarationNonansi<'a>(
68 pub ModuleNonansiHeader<'a>,
69 pub Option<TimeunitsDeclaration<'a>>,
70 pub Vec<ModuleItem>,
71 pub Metadata<'a>,
72 pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
73);
74
75#[derive(Clone, Debug, PartialEq)]
76pub struct ModuleDeclarationAnsi<'a>(
77 pub ModuleAnsiHeader<'a>,
78 pub Option<TimeunitsDeclaration<'a>>,
79 pub Vec<NonPortModuleItem>,
80 pub Metadata<'a>,
81 pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
82);
83
84#[derive(Clone, Debug, PartialEq)]
85pub struct ModuleDeclarationWildcard<'a>(
86 pub Vec<AttributeInstance<'a>>,
87 pub ModuleKeyword<'a>,
88 pub Option<Lifetime<'a>>,
89 pub ModuleIdentifier<'a>,
90 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
95 pub Vec<ModuleItem>,
96 pub Metadata<'a>, pub Option<(Metadata<'a>, ModuleIdentifier<'a>)>,
98);
99
100#[derive(Clone, Debug, PartialEq)]
101pub struct ModuleDeclarationExternNonansi<'a>(pub Metadata<'a>, pub ModuleNonansiHeader<'a>);
102
103#[derive(Clone, Debug, PartialEq)]
104pub struct ModuleDeclarationExternAnsi<'a>(pub Metadata<'a>, pub ModuleAnsiHeader<'a>);
105
106#[derive(Clone, Debug, PartialEq)]
107pub enum ModuleKeyword<'a> {
108 Module(Metadata<'a>),
109 Macromodule(Metadata<'a>),
110}
111
112#[derive(Clone, Debug, PartialEq)]
113pub enum InterfaceDeclaration<'a> {
114 InterfaceDeclarationNonansi(Box<InterfaceDeclarationNonansi<'a>>),
115 InterfaceDeclarationAnsi(Box<InterfaceDeclarationAnsi<'a>>),
116 InterfaceDeclarationWildcard(Box<InterfaceDeclarationWildcard<'a>>),
117 InterfaceDeclarationExternNonansi(Box<InterfaceDeclarationExternNonansi<'a>>),
118 InterfaceDeclarationExternAnsi(Box<InterfaceDeclarationExternAnsi<'a>>),
119}
120
121#[derive(Clone, Debug, PartialEq)]
122pub struct InterfaceDeclarationNonansi<'a>(
123 pub InterfaceNonansiHeader<'a>,
124 pub Option<TimeunitsDeclaration<'a>>,
125 pub Vec<InterfaceItem>,
126 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
128);
129
130#[derive(Clone, Debug, PartialEq)]
131pub struct InterfaceDeclarationAnsi<'a>(
132 pub InterfaceAnsiHeader<'a>,
133 pub Option<TimeunitsDeclaration<'a>>,
134 pub Vec<NonPortInterfaceItem>,
135 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
137);
138
139#[derive(Clone, Debug, PartialEq)]
140pub struct InterfaceDeclarationWildcard<'a>(
141 pub Vec<AttributeInstance<'a>>,
142 pub Metadata<'a>, pub InterfaceIdentifier<'a>,
144 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
149 pub Vec<InterfaceItem>,
150 pub Metadata<'a>, pub Option<(Metadata<'a>, InterfaceIdentifier<'a>)>,
152);
153
154#[derive(Clone, Debug, PartialEq)]
155pub struct InterfaceDeclarationExternNonansi<'a>(pub Metadata<'a>, pub InterfaceNonansiHeader<'a>);
156
157#[derive(Clone, Debug, PartialEq)]
158pub struct InterfaceDeclarationExternAnsi<'a>(pub Metadata<'a>, pub InterfaceAnsiHeader<'a>);
159
160#[derive(Clone, Debug, PartialEq)]
161pub struct InterfaceNonansiHeader<'a>(
162 pub Vec<AttributeInstance<'a>>,
163 pub Metadata<'a>, pub Option<Lifetime<'a>>,
165 pub InterfaceIdentifier<'a>,
166 pub Vec<PackageImportDeclaration>,
167 pub Option<ParameterPortList<'a>>,
168 pub ListOfPorts<'a>,
169 pub Metadata<'a>, );
171
172#[derive(Clone, Debug, PartialEq)]
173pub struct InterfaceAnsiHeader<'a>(
174 pub Vec<AttributeInstance<'a>>,
175 pub Metadata<'a>, pub Option<Lifetime<'a>>,
177 pub InterfaceIdentifier<'a>,
178 pub Vec<PackageImportDeclaration>,
179 pub Option<ParameterPortList<'a>>,
180 pub Option<ListOfPortDeclarations<'a>>,
181 pub Metadata<'a>, );
183
184#[derive(Clone, Debug, PartialEq)]
185pub enum ProgramDeclaration<'a> {
186 ProgramDeclarationNonansi(Box<ProgramDeclarationNonansi<'a>>),
187 ProgramDeclarationAnsi(Box<ProgramDeclarationAnsi<'a>>),
188 ProgramDeclarationWildcard(Box<ProgramDeclarationWildcard<'a>>),
189 ProgramDeclarationExternNonansi(Box<ProgramDeclarationExternNonansi<'a>>),
190 ProgramDeclarationExternAnsi(Box<ProgramDeclarationExternAnsi<'a>>),
191}
192
193#[derive(Clone, Debug, PartialEq)]
194pub struct ProgramDeclarationNonansi<'a>(
195 pub ProgramNonansiHeader<'a>,
196 pub Option<TimeunitsDeclaration<'a>>,
197 pub Vec<ProgramItem>,
198 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
200);
201
202#[derive(Clone, Debug, PartialEq)]
203pub struct ProgramDeclarationAnsi<'a>(
204 pub ProgramAnsiHeader<'a>,
205 pub Option<TimeunitsDeclaration<'a>>,
206 pub Vec<NonPortProgramItem>,
207 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
209);
210
211#[derive(Clone, Debug, PartialEq)]
212pub struct ProgramDeclarationWildcard<'a>(
213 pub Vec<AttributeInstance<'a>>,
214 pub Metadata<'a>, pub ProgramIdentifier<'a>,
216 pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
221 pub Vec<ProgramItem>,
222 pub Metadata<'a>, pub Option<(Metadata<'a>, ProgramIdentifier<'a>)>,
224);
225
226#[derive(Clone, Debug, PartialEq)]
227pub struct ProgramDeclarationExternNonansi<'a>(pub Metadata<'a>, pub ProgramNonansiHeader<'a>);
228
229#[derive(Clone, Debug, PartialEq)]
230pub struct ProgramDeclarationExternAnsi<'a>(pub Metadata<'a>, pub ProgramAnsiHeader<'a>);
231
232#[derive(Clone, Debug, PartialEq)]
233pub struct ProgramNonansiHeader<'a>(
234 pub Vec<AttributeInstance<'a>>,
235 pub Metadata<'a>, pub Option<Lifetime<'a>>,
237 pub ProgramIdentifier<'a>,
238 pub Vec<PackageImportDeclaration>,
239 pub Option<ParameterPortList<'a>>,
240 pub ListOfPorts<'a>,
241 pub Metadata<'a>, );
243
244#[derive(Clone, Debug, PartialEq)]
245pub struct ProgramAnsiHeader<'a>(
246 pub Vec<AttributeInstance<'a>>,
247 pub Metadata<'a>, pub Option<Lifetime<'a>>,
249 pub ProgramIdentifier<'a>,
250 pub Vec<PackageImportDeclaration>,
251 pub Option<ParameterPortList<'a>>,
252 pub Option<ListOfPortDeclarations<'a>>,
253 pub Metadata<'a>, );
255
256#[derive(Clone, Debug, PartialEq)]
257pub struct CheckerDeclaration<'a>(
258 pub Metadata<'a>, pub CheckerIdentifier<'a>,
260 pub Option<(Metadata<'a>, CheckerPortList, Metadata<'a>)>,
261 pub Metadata<'a>,
262 pub Vec<(Vec<AttributeInstance<'a>>, CheckerOrGenerateItem)>,
263 pub Metadata<'a>, pub Option<(Metadata<'a>, CheckerIdentifier<'a>)>,
265);
266
267#[derive(Clone, Debug, PartialEq)]
268pub struct ClassDeclaration<'a>(
269 pub Option<Metadata<'a>>, pub Metadata<'a>, pub Option<FinalSpecifier<'a>>,
272 pub ClassIdentifier<'a>,
273 pub Option<ParameterPortList<'a>>,
274 pub Option<(
275 Metadata<'a>, ClassType,
277 Option<(
278 Metadata<'a>, ClassDeclarationExtensionArguments<'a>,
280 Metadata<'a>, )>,
282 )>,
283 pub Option<(
284 Metadata<'a>, InterfaceClassType,
286 Vec<(Metadata<'a>, InterfaceClassType)>,
287 )>,
288 pub Metadata<'a>, pub Vec<ClassItem>,
290 pub Metadata<'a>, pub Option<(Metadata<'a>, ClassIdentifier<'a>)>,
292);
293
294#[derive(Clone, Debug, PartialEq)]
295pub enum ClassDeclarationExtensionArguments<'a> {
296 ListOfArguments(Box<ListOfArguments>),
297 Default(Metadata<'a>),
298}
299
300#[derive(Clone, Debug, PartialEq)]
301pub struct InterfaceClassDeclaration<'a>(
302 pub Metadata<'a>, pub Metadata<'a>, pub ClassIdentifier<'a>,
305 pub Option<ParameterPortList<'a>>,
306 pub Option<(
307 Metadata<'a>, InterfaceClassType,
309 Vec<(Metadata<'a>, InterfaceClassType)>,
310 )>,
311 pub Metadata<'a>, pub Vec<InterfaceClassItem>,
313 pub Metadata<'a>, pub Option<(Metadata<'a>, ClassIdentifier<'a>)>,
315);
316
317#[derive(Clone, Debug, PartialEq)]
318pub struct PackageDeclaration<'a>(
319 pub Vec<AttributeInstance<'a>>,
320 pub Metadata<'a>, pub Option<Lifetime<'a>>,
322 pub PackageIdentifier<'a>,
323 pub Metadata<'a>, pub Option<TimeunitsDeclaration<'a>>,
325 pub Vec<(Vec<AttributeInstance<'a>>, PackageItem)>,
326 pub Metadata<'a>, pub Option<(Metadata<'a>, PackageIdentifier<'a>)>,
328);
329
330#[derive(Clone, Debug, PartialEq)]
331pub enum TimeunitsDeclaration<'a> {
332 Timeunit(
333 Metadata<'a>, TimeLiteral<'a>,
335 Option<(Metadata<'a>, TimeLiteral<'a>)>,
336 Metadata<'a>, ),
338 Timeprecision(
339 Metadata<'a>, TimeLiteral<'a>,
341 Metadata<'a>, ),
343 Timeunitprecision(
344 Metadata<'a>, TimeLiteral<'a>,
346 Metadata<'a>, Metadata<'a>, TimeLiteral<'a>,
349 Metadata<'a>, ),
351 Timeprecisionunit(
352 Metadata<'a>, TimeLiteral<'a>,
354 Metadata<'a>, Metadata<'a>, TimeLiteral<'a>,
357 Metadata<'a>, ),
359}