Skip to main content

scarf_syntax/behavioral_statements/
patterns.rs

1// =======================================================================
2// patterns.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.6.7.1
5use 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>, // '
19            Metadata<'a>, // {
20            Pattern<'a>,
21            Vec<(
22                Metadata<'a>, // ,
23                Pattern<'a>,
24            )>,
25            Metadata<'a>, // }
26        )>,
27    ),
28    MultiIdentifierPattern(
29        Box<(
30            Metadata<'a>, // '
31            Metadata<'a>, // {
32            MemberIdentifier<'a>,
33            Metadata<'a>, // :
34            Pattern<'a>,
35            Vec<(
36                Metadata<'a>, // ,
37                MemberIdentifier<'a>,
38                Metadata<'a>, // :
39                Pattern<'a>,
40            )>,
41            Metadata<'a>, // }
42        )>,
43    ),
44}
45
46#[derive(Clone, Debug, PartialEq)]
47pub enum AssignmentPattern<'a> {
48    Expression(
49        Box<(
50            Metadata<'a>, // '
51            Metadata<'a>, // {
52            Expression<'a>,
53            Vec<(
54                Metadata<'a>, // ,
55                Expression<'a>,
56            )>,
57            Metadata<'a>, // }
58        )>,
59    ),
60    Structure(
61        Box<(
62            Metadata<'a>, // '
63            Metadata<'a>, // {
64            StructurePatternKey<'a>,
65            Metadata<'a>, // :
66            Expression<'a>,
67            Vec<(
68                Metadata<'a>, // ,
69                StructurePatternKey<'a>,
70                Metadata<'a>, // :
71                Expression<'a>,
72            )>,
73            Metadata<'a>, // }
74        )>,
75    ),
76    Array(
77        Box<(
78            Metadata<'a>, // '
79            Metadata<'a>, // {
80            ArrayPatternKey<'a>,
81            Metadata<'a>, // :
82            Expression<'a>,
83            Vec<(
84                Metadata<'a>, // ,
85                ArrayPatternKey<'a>,
86                Metadata<'a>, // :
87                Expression<'a>,
88            )>,
89            Metadata<'a>, // }
90        )>,
91    ),
92    Constant(
93        Box<(
94            Metadata<'a>, // '
95            Metadata<'a>, // {
96            ConstantExpression<'a>,
97            Metadata<'a>, // {
98            Expression<'a>,
99            Vec<(
100                Metadata<'a>, // ,
101                Expression<'a>,
102            )>,
103            Metadata<'a>, // }
104            Metadata<'a>, // }
105        )>,
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>, // '
149    pub Metadata<'a>, // {
150    pub NetLvalue<'a>,
151    pub  Vec<(
152        Metadata<'a>, // ,
153        NetLvalue<'a>,
154    )>,
155    pub Metadata<'a>, // }
156);
157
158#[derive(Clone, Debug, PartialEq)]
159pub struct AssignmentPatternVariableLvalue<'a>(
160    pub Metadata<'a>, // '
161    pub Metadata<'a>, // {
162    pub VariableLvalue<'a>,
163    pub  Vec<(
164        Metadata<'a>, // ,
165        VariableLvalue<'a>,
166    )>,
167    pub Metadata<'a>, // }
168);