Skip to main content

scarf_syntax/instantiations/
generated_instantiation.rs

1// =======================================================================
2// generated_instantiation.rs
3// =======================================================================
4//! CST Nodes from 1800-2023 A.4.2
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct GenerateRegion<'a>(
9    pub Metadata<'a>, // generate
10    pub Vec<GenerateItem<'a>>,
11    pub Metadata<'a>, // endgenerate
12);
13
14#[derive(Clone, Debug, PartialEq)]
15pub struct LoopGenerateConstruct<'a>(
16    pub Metadata<'a>, // for
17    pub Metadata<'a>, // (
18    pub GenvarInitialization<'a>,
19    pub Metadata<'a>, // ;
20    pub GenvarExpression<'a>,
21    pub Metadata<'a>, // ;
22    pub GenvarIteration<'a>,
23    pub Metadata<'a>, // )
24    pub GenerateBlock<'a>,
25);
26
27#[derive(Clone, Debug, PartialEq)]
28pub struct GenvarInitialization<'a>(
29    pub Option<Metadata<'a>>, // genvar
30    pub GenvarIdentifier<'a>,
31    pub Metadata<'a>, // =
32    pub ConstantExpression<'a>,
33);
34
35#[derive(Clone, Debug, PartialEq)]
36pub enum GenvarIteration<'a> {
37    Assignment(
38        Box<(
39            GenvarIdentifier<'a>,
40            AssignmentOperator<'a>,
41            GenvarExpression<'a>,
42        )>,
43    ),
44    Prefix(Box<(IncOrDecOperator<'a>, GenvarIdentifier<'a>)>),
45    Postfix(Box<(GenvarIdentifier<'a>, IncOrDecOperator<'a>)>),
46}
47
48#[derive(Clone, Debug, PartialEq)]
49pub enum ConditionalGenerateConstruct<'a> {
50    If(Box<IfGenerateConstruct<'a>>),
51    Case(Box<CaseGenerateConstruct<'a>>),
52}
53
54#[derive(Clone, Debug, PartialEq)]
55pub struct IfGenerateConstruct<'a>(
56    pub Metadata<'a>, // if
57    pub Metadata<'a>, // (
58    pub ConstantExpression<'a>,
59    pub Metadata<'a>, // )
60    pub GenerateBlock<'a>,
61    pub  Option<(
62        Metadata<'a>, // else
63        GenerateBlock<'a>,
64    )>,
65);
66
67#[derive(Clone, Debug, PartialEq)]
68pub struct CaseGenerateConstruct<'a>(
69    pub Metadata<'a>, // case
70    pub Metadata<'a>, // (
71    pub ConstantExpression<'a>,
72    pub Metadata<'a>, // )
73    pub CaseGenerateItem<'a>,
74    pub Vec<CaseGenerateItem<'a>>,
75    pub Metadata<'a>, // endcase
76);
77
78#[derive(Clone, Debug, PartialEq)]
79pub enum CaseGenerateItem<'a> {
80    Expression(
81        Box<(
82            ConstantExpression<'a>,
83            Vec<(
84                Metadata<'a>, // ,
85                ConstantExpression<'a>,
86            )>,
87            Metadata<'a>, // :
88            GenerateBlock<'a>,
89        )>,
90    ),
91    Default(
92        Box<(
93            Metadata<'a>,         // default
94            Option<Metadata<'a>>, // :
95            GenerateBlock<'a>,
96        )>,
97    ),
98}
99
100#[derive(Clone, Debug, PartialEq)]
101pub enum GenerateBlock<'a> {
102    Item(Box<GenerateItem<'a>>),
103    Block(
104        Box<(
105            Option<(
106                GenerateBlockIdentifier<'a>,
107                Metadata<'a>, // :
108            )>,
109            Metadata<'a>, // begin
110            Option<(
111                Metadata<'a>, // :
112                GenerateBlockIdentifier<'a>,
113            )>,
114            Vec<GenerateItem<'a>>,
115            Metadata<'a>, // end
116            Option<(
117                Metadata<'a>, // :
118                GenerateBlockIdentifier<'a>,
119            )>,
120        )>,
121    ),
122}
123
124#[derive(Clone, Debug, PartialEq)]
125pub enum GenerateItem<'a> {
126    Module(Box<ModuleOrGenerateItem<'a>>),
127    Interface(Box<InterfaceOrGenerateItem<'a>>),
128    Checker(Box<CheckerOrGenerateItem<'a>>),
129}