scarf_syntax/source_text/
constraints.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ConstraintDeclaration<'a>(
9 pub Option<Metadata<'a>>, pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
12 pub ConstraintIdentifier<'a>,
13 pub ConstraintBlock<'a>,
14);
15
16#[derive(Clone, Debug, PartialEq)]
17pub struct ConstraintBlock<'a>(
18 pub Metadata<'a>, pub Vec<ConstraintBlockItem<'a>>,
20 pub Metadata<'a>, );
22
23#[derive(Clone, Debug, PartialEq)]
24pub enum ConstraintBlockItem<'a> {
25 Ordering(
26 Box<(
27 Metadata<'a>, SolveBeforeList<'a>,
29 Metadata<'a>, SolveBeforeList<'a>,
31 Metadata<'a>, )>,
33 ),
34 Expression(Box<ConstraintExpression<'a>>),
35}
36
37#[derive(Clone, Debug, PartialEq)]
38pub struct SolveBeforeList<'a>(
39 pub ConstraintPrimary<'a>,
40 pub Vec<(
41 Metadata<'a>, ConstraintPrimary<'a>,
43 )>,
44);
45
46#[derive(Clone, Debug, PartialEq)]
47pub struct ConstraintPrimary<'a>(
48 pub ImplicitClassHandleOrClassScope<'a>,
49 pub HierarchicalIdentifier<'a>,
50 pub Select<'a>,
51 pub Option<(
52 Metadata<'a>, Metadata<'a>, )>,
55);
56
57#[derive(Clone, Debug, PartialEq)]
58pub enum ConstraintExpression<'a> {
59 Expression(
60 Box<(
61 Option<Metadata<'a>>, ExpressionOrDist<'a>,
63 Metadata<'a>, )>,
65 ),
66 Uniqueness(
67 Box<(
68 UniquenessConstraint<'a>,
69 Metadata<'a>, )>,
71 ),
72 Implication(
73 Box<(
74 Expression<'a>,
75 Metadata<'a>, ConstraintSet<'a>,
77 )>,
78 ),
79 Conditional(
80 Box<(
81 Metadata<'a>, Metadata<'a>, Expression<'a>,
84 Metadata<'a>, ConstraintSet<'a>,
86 Option<(
87 Metadata<'a>, ConstraintSet<'a>,
89 )>,
90 )>,
91 ),
92 Foreach(
93 Box<(
94 Metadata<'a>, Metadata<'a>, PsOrHierarchicalArrayIdentifier<'a>,
97 Metadata<'a>, LoopVariables<'a>,
99 Metadata<'a>, Metadata<'a>, ConstraintSet<'a>,
102 )>,
103 ),
104 Disable(
105 Box<(
106 Metadata<'a>, Metadata<'a>, ConstraintPrimary<'a>,
109 Metadata<'a>, )>,
111 ),
112}
113
114#[derive(Clone, Debug, PartialEq)]
115pub struct UniquenessConstraint<'a>(
116 pub Metadata<'a>, pub Metadata<'a>, pub RangeList<'a>,
119 pub Metadata<'a>, );
121
122#[derive(Clone, Debug, PartialEq)]
123pub enum ConstraintSet<'a> {
124 Single(Box<ConstraintExpression<'a>>),
125 Multi(
126 Box<(
127 Metadata<'a>, Vec<ConstraintExpression<'a>>,
129 Metadata<'a>, )>,
131 ),
132}
133
134#[derive(Clone, Debug, PartialEq)]
135pub struct ExpressionOrDist<'a>(
136 pub Expression<'a>,
137 pub Option<(
138 Metadata<'a>, Metadata<'a>, DistList<'a>,
141 Metadata<'a>, )>,
143);
144
145#[derive(Clone, Debug, PartialEq)]
146pub struct DistList<'a>(
147 pub DistItem<'a>,
148 pub Vec<(
149 Metadata<'a>, DistItem<'a>,
151 )>,
152);
153
154#[derive(Clone, Debug, PartialEq)]
155pub enum DistItem<'a> {
156 Value(Box<(ValueRange<'a>, Option<DistWeight<'a>>)>),
157 Default(
158 Box<(
159 Metadata<'a>, Metadata<'a>, Expression<'a>,
162 )>,
163 ),
164}
165
166#[derive(Clone, Debug, PartialEq)]
167pub enum DistWeight<'a> {
168 IndvWeight(
169 Metadata<'a>, Expression<'a>,
171 ),
172 RangeWeight(
173 Metadata<'a>, Expression<'a>,
175 ),
176}
177
178#[derive(Clone, Debug, PartialEq)]
179pub struct ConstraintPrototype<'a>(
180 pub Option<ConstraintPrototypeQualifier<'a>>,
181 pub Option<Metadata<'a>>, pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
184 pub ConstraintIdentifier<'a>,
185 pub Metadata<'a>, );
187
188#[derive(Clone, Debug, PartialEq)]
189pub enum ConstraintPrototypeQualifier<'a> {
190 Extern(Metadata<'a>),
191 Pure(Metadata<'a>),
192}
193
194#[derive(Clone, Debug, PartialEq)]
195pub struct ExternConstraintDeclaration<'a>(
196 pub Option<Metadata<'a>>, pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
199 pub ClassScope<'a>,
200 pub ConstraintIdentifier<'a>,
201 pub ConstraintBlock<'a>,
202);