sv_parser_syntaxtree/behavioral_statements/
case_statements.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[derive(Clone, Debug, PartialEq, Node)]
6pub enum CaseStatement {
7    Normal(Box<CaseStatementNormal>),
8    Matches(Box<CaseStatementMatches>),
9    Inside(Box<CaseStatementInside>),
10}
11
12#[derive(Clone, Debug, PartialEq, Node)]
13pub struct CaseStatementNormal {
14    pub nodes: (
15        Option<UniquePriority>,
16        CaseKeyword,
17        Paren<CaseExpression>,
18        CaseItem,
19        Vec<CaseItem>,
20        Keyword,
21    ),
22}
23
24#[derive(Clone, Debug, PartialEq, Node)]
25pub struct CaseStatementMatches {
26    pub nodes: (
27        Option<UniquePriority>,
28        CaseKeyword,
29        Paren<CaseExpression>,
30        Keyword,
31        CasePatternItem,
32        Vec<CasePatternItem>,
33        Keyword,
34    ),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub struct CaseStatementInside {
39    pub nodes: (
40        Option<UniquePriority>,
41        Keyword,
42        Paren<CaseExpression>,
43        Keyword,
44        CaseInsideItem,
45        Vec<CaseInsideItem>,
46        Keyword,
47    ),
48}
49
50#[derive(Clone, Debug, PartialEq, Node)]
51pub enum CaseKeyword {
52    Case(Box<Keyword>),
53    Casez(Box<Keyword>),
54    Casex(Box<Keyword>),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub struct CaseExpression {
59    pub nodes: (Expression,),
60}
61
62#[derive(Clone, Debug, PartialEq, Node)]
63pub enum CaseItem {
64    NonDefault(Box<CaseItemNondefault>),
65    Default(Box<CaseItemDefault>),
66}
67
68#[derive(Clone, Debug, PartialEq, Node)]
69pub struct CaseItemNondefault {
70    pub nodes: (List<Symbol, CaseItemExpression>, Symbol, StatementOrNull),
71}
72
73#[derive(Clone, Debug, PartialEq, Node)]
74pub struct CaseItemDefault {
75    pub nodes: (Keyword, Option<Symbol>, StatementOrNull),
76}
77
78#[derive(Clone, Debug, PartialEq, Node)]
79pub enum CasePatternItem {
80    NonDefault(Box<CasePatternItemNondefault>),
81    Default(Box<CaseItemDefault>),
82}
83
84#[derive(Clone, Debug, PartialEq, Node)]
85pub struct CasePatternItemNondefault {
86    pub nodes: (
87        Pattern,
88        Option<(Symbol, Expression)>,
89        Symbol,
90        StatementOrNull,
91    ),
92}
93
94#[derive(Clone, Debug, PartialEq, Node)]
95pub enum CaseInsideItem {
96    NonDefault(Box<CaseInsideItemNondefault>),
97    Default(Box<CaseItemDefault>),
98}
99
100#[derive(Clone, Debug, PartialEq, Node)]
101pub struct CaseInsideItemNondefault {
102    pub nodes: (OpenRangeList, Symbol, StatementOrNull),
103}
104
105#[derive(Clone, Debug, PartialEq, Node)]
106pub struct CaseItemExpression {
107    pub nodes: (Expression,),
108}
109
110#[derive(Clone, Debug, PartialEq, Node)]
111pub struct RandcaseStatement {
112    pub nodes: (Keyword, RandcaseItem, Vec<RandcaseItem>, Keyword),
113}
114
115#[derive(Clone, Debug, PartialEq, Node)]
116pub struct RandcaseItem {
117    pub nodes: (Expression, Symbol, StatementOrNull),
118}
119
120#[derive(Clone, Debug, PartialEq, Node)]
121pub struct OpenRangeList {
122    pub nodes: (List<Symbol, OpenValueRange>,),
123}
124
125#[derive(Clone, Debug, PartialEq, Node)]
126pub struct OpenValueRange {
127    pub nodes: (ValueRange,),
128}