scarf_syntax/behavioral_statements/
patterns.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum Pattern<'a> {
9 Parentheses(Box<(Metadata<'a>, Pattern<'a>, Metadata<'a>)>),
10 VariableIdentifier(Box<(Metadata<'a>, VariableIdentifier<'a>)>),
11 Wildcard(Box<(Metadata<'a>, Metadata<'a>)>),
12 ConstantExpression(Box<ConstantExpression<'a>>),
13 TaggedMember(
14 Box<(Metadata<'a>, MemberIdentifier<'a>, Option<Pattern<'a>>)>,
15 ),
16 MultiPattern(
17 Box<(
18 Metadata<'a>, Metadata<'a>, Pattern<'a>,
21 Vec<(
22 Metadata<'a>, Pattern<'a>,
24 )>,
25 Metadata<'a>, )>,
27 ),
28 MultiIdentifierPattern(
29 Box<(
30 Metadata<'a>, Metadata<'a>, MemberIdentifier<'a>,
33 Metadata<'a>, Pattern<'a>,
35 Vec<(
36 Metadata<'a>, MemberIdentifier<'a>,
38 Metadata<'a>, Pattern<'a>,
40 )>,
41 Metadata<'a>, )>,
43 ),
44}
45
46#[derive(Clone, Debug, PartialEq)]
47pub enum AssignmentPattern<'a> {
48 Expression(
49 Box<(
50 Metadata<'a>, Metadata<'a>, Expression<'a>,
53 Vec<(
54 Metadata<'a>, Expression<'a>,
56 )>,
57 Metadata<'a>, )>,
59 ),
60 Structure(
61 Box<(
62 Metadata<'a>, Metadata<'a>, StructurePatternKey<'a>,
65 Metadata<'a>, Expression<'a>,
67 Vec<(
68 Metadata<'a>, StructurePatternKey<'a>,
70 Metadata<'a>, Expression<'a>,
72 )>,
73 Metadata<'a>, )>,
75 ),
76 Array(
77 Box<(
78 Metadata<'a>, Metadata<'a>, ArrayPatternKey<'a>,
81 Metadata<'a>, Expression<'a>,
83 Vec<(
84 Metadata<'a>, ArrayPatternKey<'a>,
86 Metadata<'a>, Expression<'a>,
88 )>,
89 Metadata<'a>, )>,
91 ),
92 Constant(
93 Box<(
94 Metadata<'a>, Metadata<'a>, ConstantExpression<'a>,
97 Metadata<'a>, Expression<'a>,
99 Vec<(
100 Metadata<'a>, Expression<'a>,
102 )>,
103 Metadata<'a>, Metadata<'a>, )>,
106 ),
107}
108
109#[derive(Clone, Debug, PartialEq)]
110pub enum StructurePatternKey<'a> {
111 MemberIdentifier(Box<MemberIdentifier<'a>>),
112 AssignmentPatternKey(Box<AssignmentPatternKey<'a>>),
113}
114
115#[derive(Clone, Debug, PartialEq)]
116pub enum ArrayPatternKey<'a> {
117 ConstantExpression(Box<ConstantExpression<'a>>),
118 AssignmentPatternKey(Box<AssignmentPatternKey<'a>>),
119}
120
121#[derive(Clone, Debug, PartialEq)]
122pub enum AssignmentPatternKey<'a> {
123 SimpleType(Box<SimpleType<'a>>),
124 Default(Box<Metadata<'a>>),
125}
126
127#[derive(Clone, Debug, PartialEq)]
128pub struct AssignmentPatternExpression<'a>(
129 pub Option<AssignmentPatternExpressionType<'a>>,
130 pub AssignmentPattern<'a>,
131);
132
133#[derive(Clone, Debug, PartialEq)]
134pub enum AssignmentPatternExpressionType<'a> {
135 PsType(Box<PsTypeIdentifier<'a>>),
136 PsParameter(Box<PsParameterIdentifier<'a>>),
137 Integer(Box<IntegerAtomType<'a>>),
138 Type(Box<TypeReference<'a>>),
139}
140
141#[derive(Clone, Debug, PartialEq)]
142pub struct ConstantAssignmentPatternExpression<'a>(
143 pub AssignmentPatternExpression<'a>,
144);
145
146#[derive(Clone, Debug, PartialEq)]
147pub struct AssignmentPatternNetLvalue<'a>(
148 pub Metadata<'a>, pub Metadata<'a>, pub NetLvalue<'a>,
151 pub Vec<(
152 Metadata<'a>, NetLvalue<'a>,
154 )>,
155 pub Metadata<'a>, );
157
158#[derive(Clone, Debug, PartialEq)]
159pub struct AssignmentPatternVariableLvalue<'a>(
160 pub Metadata<'a>, pub Metadata<'a>, pub VariableLvalue<'a>,
163 pub Vec<(
164 Metadata<'a>, VariableLvalue<'a>,
166 )>,
167 pub Metadata<'a>, );