Skip to main content

scarf_syntax/source_text/
module_items.rs

1// =======================================================================
2// module_items.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.1.4
5use 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>, // $fatal
18    pub  Option<(
19        Metadata<'a>, // (
20        FinishNumber<'a>,
21        Option<(
22            Metadata<'a>, // ,
23            ListOfArguments<'a>,
24        )>,
25        Metadata<'a>, // )
26    )>,
27    pub Metadata<'a>, // ;
28);
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct ErrorSeveritySystemTask<'a>(
32    pub Metadata<'a>, // $error
33    pub  Option<(
34        Metadata<'a>, // (
35        Option<ListOfArguments<'a>>,
36        Metadata<'a>, // )
37    )>,
38    pub Metadata<'a>, // ;
39);
40
41#[derive(Clone, Debug, PartialEq)]
42pub struct WarningSeveritySystemTask<'a>(
43    pub Metadata<'a>, // $warning
44    pub  Option<(
45        Metadata<'a>, // (
46        Option<ListOfArguments<'a>>,
47        Metadata<'a>, // )
48    )>,
49    pub Metadata<'a>, // ;
50);
51
52#[derive(Clone, Debug, PartialEq)]
53pub struct InfoSeveritySystemTask<'a>(
54    pub Metadata<'a>, // $info
55    pub  Option<(
56        Metadata<'a>, // (
57        Option<ListOfArguments<'a>>,
58        Metadata<'a>, // )
59    )>,
60    pub Metadata<'a>, // ;
61);
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>, // ;
96        )>,
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>, // default
118            Metadata<'a>, // clocking
119            ClockingIdentifier<'a>,
120            Metadata<'a>, // ;
121        )>,
122    ),
123    DefaultDisable(
124        Box<(
125            Metadata<'a>, // default
126            Metadata<'a>, // disable
127            Metadata<'a>, // iff
128            ExpressionOrDist<'a>,
129            Metadata<'a>, // ;
130        )>,
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>, // defparam
149    pub ListOfDefparamAssignments<'a>,
150    pub Metadata<'a>, // ;
151);
152
153#[derive(Clone, Debug, PartialEq)]
154pub enum BindDirective<'a> {
155    Scope(
156        Box<(
157            Metadata<'a>, // bind
158            BindTargetScope<'a>,
159            Option<(
160                Metadata<'a>, // :
161                BindTargetInstanceList<'a>,
162            )>,
163            BindInstantiation<'a>,
164            Metadata<'a>, // ;
165        )>,
166    ),
167    Instance(
168        Box<(
169            Metadata<'a>, // bind
170            BindTargetInstance<'a>,
171            BindInstantiation<'a>,
172            Metadata<'a>, // ;
173        )>,
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>, // ,
194        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}