scarf_syntax/behavioral_statements/
case_statements.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum CaseStatement<'a> {
9 Regular(
10 Box<(
11 Option<UniquePriority<'a>>,
12 CaseKeyword<'a>,
13 Metadata<'a>, CaseExpression<'a>,
15 Metadata<'a>, CaseItem<'a>,
17 Vec<CaseItem<'a>>,
18 Metadata<'a>, )>,
20 ),
21 Matches(
22 Box<(
23 Option<UniquePriority<'a>>,
24 CaseKeyword<'a>,
25 Metadata<'a>, CaseExpression<'a>,
27 Metadata<'a>, Metadata<'a>, CasePatternItem<'a>,
30 Vec<CasePatternItem<'a>>,
31 Metadata<'a>, )>,
33 ),
34 Inside(
35 Box<(
36 Option<UniquePriority<'a>>,
37 CaseKeyword<'a>,
38 Metadata<'a>, CaseExpression<'a>,
40 Metadata<'a>, Metadata<'a>, CaseInsideItem<'a>,
43 Vec<CaseInsideItem<'a>>,
44 Metadata<'a>, )>,
46 ),
47}
48
49#[derive(Clone, Debug, PartialEq)]
50pub enum CaseKeyword<'a> {
51 Case(Metadata<'a>),
52 Casez(Metadata<'a>),
53 Casex(Metadata<'a>),
54}
55
56#[derive(Clone, Debug, PartialEq)]
57pub struct CaseExpression<'a>(pub Expression<'a>);
58
59#[derive(Clone, Debug, PartialEq)]
60pub enum CaseItem<'a> {
61 Expression(
62 Box<(
63 CaseItemExpression<'a>,
64 Vec<(
65 Metadata<'a>, CaseItemExpression<'a>,
67 )>,
68 Metadata<'a>, StatementOrNull<'a>,
70 )>,
71 ),
72 Default(
73 Box<(
74 Metadata<'a>, Option<Metadata<'a>>, StatementOrNull<'a>,
77 )>,
78 ),
79}
80
81#[derive(Clone, Debug, PartialEq)]
82pub enum CasePatternItem<'a> {
83 Expression(
84 Box<(
85 Pattern<'a>,
86 Option<(
87 Metadata<'a>, Expression<'a>,
89 )>,
90 Metadata<'a>, StatementOrNull<'a>,
92 )>,
93 ),
94 Default(
95 Box<(
96 Metadata<'a>, Option<Metadata<'a>>, StatementOrNull<'a>,
99 )>,
100 ),
101}
102
103#[derive(Clone, Debug, PartialEq)]
104pub enum CaseInsideItem<'a> {
105 Expression(
106 Box<(
107 RangeList<'a>,
108 Metadata<'a>, StatementOrNull<'a>,
110 )>,
111 ),
112 Default(
113 Box<(
114 Metadata<'a>, Option<Metadata<'a>>, StatementOrNull<'a>,
117 )>,
118 ),
119}
120
121#[derive(Clone, Debug, PartialEq)]
122pub struct CaseItemExpression<'a>(pub Expression<'a>);
123
124#[derive(Clone, Debug, PartialEq)]
125pub struct RandcaseStatement<'a>(
126 pub Metadata<'a>, pub RandcaseItem<'a>,
128 pub Vec<RandcaseItem<'a>>,
129 pub Metadata<'a>, );
131
132#[derive(Clone, Debug, PartialEq)]
133pub struct RandcaseItem<'a>(
134 pub Expression<'a>,
135 pub Metadata<'a>, pub StatementOrNull<'a>,
137);
138
139#[derive(Clone, Debug, PartialEq)]
140pub struct RangeList<'a>(
141 pub ValueRange<'a>,
142 pub Vec<(Metadata<'a>, ValueRange<'a>)>,
143);
144
145#[derive(Clone, Debug, PartialEq)]
146pub enum ValueRange<'a> {
147 Expression(Box<Expression<'a>>),
148 Slice(
149 Box<(
150 Metadata<'a>, Expression<'a>,
152 Metadata<'a>, Expression<'a>,
154 Metadata<'a>, )>,
156 ),
157 DollarLow(
158 Box<(
159 Metadata<'a>, Metadata<'a>, Metadata<'a>, Expression<'a>,
163 Metadata<'a>, )>,
165 ),
166 DollarHigh(
167 Box<(
168 Metadata<'a>, Expression<'a>,
170 Metadata<'a>, Metadata<'a>, Metadata<'a>, )>,
174 ),
175 AbsoluteTolerance(
176 Box<(
177 Metadata<'a>, Expression<'a>,
179 Metadata<'a>, Expression<'a>,
181 Metadata<'a>, )>,
183 ),
184 RelativeTolerance(
185 Box<(
186 Metadata<'a>, Expression<'a>,
188 Metadata<'a>, Expression<'a>,
190 Metadata<'a>, )>,
192 ),
193}