scarf_syntax/source_text/
module_items.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum SeveritySystemTask<'a> {
9 Fatal(Box<FatalSeveritySystemTask<'a>>),
10 Error(Box<ErrorSeveritySystemTask<'a>>),
11 Warning(Box<WarningSeveritySystemTask<'a>>),
12 Info(Box<InfoSeveritySystemTask<'a>>),
13}
14
15#[derive(Clone, Debug, PartialEq)]
16pub struct FatalSeveritySystemTask<'a>(
17 pub Metadata<'a>, pub Option<(
19 Metadata<'a>, FinishNumber<'a>,
21 Option<(
22 Metadata<'a>, ListOfArguments<'a>,
24 )>,
25 Metadata<'a>, )>,
27 pub Metadata<'a>, );
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct ErrorSeveritySystemTask<'a>(
32 pub Metadata<'a>, pub Option<(
34 Metadata<'a>, Option<ListOfArguments<'a>>,
36 Metadata<'a>, )>,
38 pub Metadata<'a>, );
40
41#[derive(Clone, Debug, PartialEq)]
42pub struct WarningSeveritySystemTask<'a>(
43 pub Metadata<'a>, pub Option<(
45 Metadata<'a>, Option<ListOfArguments<'a>>,
47 Metadata<'a>, )>,
49 pub Metadata<'a>, );
51
52#[derive(Clone, Debug, PartialEq)]
53pub struct InfoSeveritySystemTask<'a>(
54 pub Metadata<'a>, pub Option<(
56 Metadata<'a>, Option<ListOfArguments<'a>>,
58 Metadata<'a>, )>,
60 pub Metadata<'a>, );
62
63#[derive(Clone, Debug, PartialEq)]
64pub enum FinishNumber<'a> {
65 Zero(Metadata<'a>),
66 One(Metadata<'a>),
67 Two(Metadata<'a>),
68}
69
70#[derive(Clone, Debug, PartialEq)]
71pub struct ElaborationSeveritySystemTask<'a>(pub SeveritySystemTask<'a>);
72
73#[derive(Clone, Debug, PartialEq)]
74pub enum ModuleCommonItem<'a> {
75 ModuleOrGenerateDeclaration(Box<ModuleOrGenerateItemDeclaration<'a>>),
76 Interface(Box<InterfaceInstantiation<'a>>),
77 Program(Box<ProgramInstantiation<'a>>),
78 Assertion(Box<AssertionItem<'a>>),
79 Bind(Box<BindDirective<'a>>),
80 Assign(Box<ContinuousAssign<'a>>),
81 Alias(Box<NetAlias<'a>>),
82 Initial(Box<InitialConstruct<'a>>),
83 Final(Box<FinalConstruct<'a>>),
84 Always(Box<AlwaysConstruct<'a>>),
85 LoopGenerate(Box<LoopGenerateConstruct<'a>>),
86 ConditionalGenerateConstruct(Box<ConditionalGenerateConstruct<'a>>),
87 SystemSeverity(Box<ElaborationSeveritySystemTask<'a>>),
88}
89
90#[derive(Clone, Debug, PartialEq)]
91pub enum ModuleItem<'a> {
92 Port(
93 Box<(
94 PortDeclaration<'a>,
95 Metadata<'a>, )>,
97 ),
98 NonPort(Box<NonPortModuleItem<'a>>),
99}
100
101#[derive(Clone, Debug, PartialEq)]
102pub enum ModuleOrGenerateItem<'a> {
103 ParameterOverride(Box<(Vec<AttributeInstance<'a>>, ParameterOverride<'a>)>),
104 Gate(Box<(Vec<AttributeInstance<'a>>, GateInstantiation<'a>)>),
105 Udp(Box<(Vec<AttributeInstance<'a>>, UdpInstantiation<'a>)>),
106 Module(Box<(Vec<AttributeInstance<'a>>, ModuleInstantiation<'a>)>),
107 ModuleCommon(Box<(Vec<AttributeInstance<'a>>, ModuleCommonItem<'a>)>),
108}
109
110#[derive(Clone, Debug, PartialEq)]
111pub enum ModuleOrGenerateItemDeclaration<'a> {
112 PackageOrGenerate(Box<PackageOrGenerateItemDeclaration<'a>>),
113 Genvar(Box<GenvarDeclaration<'a>>),
114 Clocking(Box<ClockingDeclaration<'a>>),
115 DefaultClocking(
116 Box<(
117 Metadata<'a>, Metadata<'a>, ClockingIdentifier<'a>,
120 Metadata<'a>, )>,
122 ),
123 DefaultDisable(
124 Box<(
125 Metadata<'a>, Metadata<'a>, Metadata<'a>, ExpressionOrDist<'a>,
129 Metadata<'a>, )>,
131 ),
132}
133
134#[derive(Clone, Debug, PartialEq)]
135pub enum NonPortModuleItem<'a> {
136 Region(Box<GenerateRegion<'a>>),
137 ModuleOrGenerate(Box<ModuleOrGenerateItem<'a>>),
138 Specify(Box<SpecifyBlock<'a>>),
139 Specparam(Box<(Vec<AttributeInstance<'a>>, SpecparamAssignment<'a>)>),
140 Program(Box<ProgramDeclaration<'a>>),
141 Module(Box<ModuleDeclaration<'a>>),
142 Interface(Box<InterfaceDeclaration<'a>>),
143 Timeunits(Box<TimeunitsDeclaration<'a>>),
144}
145
146#[derive(Clone, Debug, PartialEq)]
147pub struct ParameterOverride<'a>(
148 pub Metadata<'a>, pub ListOfDefparamAssignments<'a>,
150 pub Metadata<'a>, );
152
153#[derive(Clone, Debug, PartialEq)]
154pub enum BindDirective<'a> {
155 Scope(
156 Box<(
157 Metadata<'a>, BindTargetScope<'a>,
159 Option<(
160 Metadata<'a>, BindTargetInstanceList<'a>,
162 )>,
163 BindInstantiation<'a>,
164 Metadata<'a>, )>,
166 ),
167 Instance(
168 Box<(
169 Metadata<'a>, BindTargetInstance<'a>,
171 BindInstantiation<'a>,
172 Metadata<'a>, )>,
174 ),
175}
176
177#[derive(Clone, Debug, PartialEq)]
178pub enum BindTargetScope<'a> {
179 Module(ModuleIdentifier<'a>),
180 Interface(InterfaceIdentifier<'a>),
181}
182
183#[derive(Clone, Debug, PartialEq)]
184pub struct BindTargetInstance<'a>(
185 pub HierarchicalIdentifier<'a>,
186 pub ConstantBitSelect<'a>,
187);
188
189#[derive(Clone, Debug, PartialEq)]
190pub struct BindTargetInstanceList<'a>(
191 pub BindTargetInstance<'a>,
192 pub Vec<(
193 Metadata<'a>, BindTargetInstance<'a>,
195 )>,
196);
197
198#[derive(Clone, Debug, PartialEq)]
199pub enum BindInstantiation<'a> {
200 Program(Box<ProgramInstantiation<'a>>),
201 Module(Box<ModuleInstantiation<'a>>),
202 Interface(Box<InterfaceInstantiation<'a>>),
203 Checker(Box<CheckerInstantiation<'a>>),
204}