Skip to main content

scarf_syntax/behavioral_statements/
looping_statements.rs

1// =======================================================================
2// looping_statements.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.6.8
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum LoopStatement<'a> {
9    Forever(
10        Box<(
11            Metadata<'a>, // forever
12            StatementOrNull<'a>,
13        )>,
14    ),
15    Repeat(
16        Box<(
17            Metadata<'a>, // repeat
18            Metadata<'a>, // (
19            Expression<'a>,
20            Metadata<'a>, // )
21            StatementOrNull<'a>,
22        )>,
23    ),
24    While(
25        Box<(
26            Metadata<'a>, // while
27            Metadata<'a>, // (
28            Expression<'a>,
29            Metadata<'a>, // )
30            StatementOrNull<'a>,
31        )>,
32    ),
33    For(
34        Box<(
35            Metadata<'a>, // for
36            Metadata<'a>, // (
37            Option<ForInitialization<'a>>,
38            Metadata<'a>, // ;
39            Option<Expression<'a>>,
40            Metadata<'a>, // ;
41            Option<ForStep<'a>>,
42            Metadata<'a>, // )
43            StatementOrNull<'a>,
44        )>,
45    ),
46    DoWhile(
47        Box<(
48            Metadata<'a>, // do
49            StatementOrNull<'a>,
50            Metadata<'a>, // while
51            Metadata<'a>, // (
52            Expression<'a>,
53            Metadata<'a>, // )
54            Metadata<'a>, // ;
55        )>,
56    ),
57    Foreach(
58        Box<(
59            Metadata<'a>, // foreach
60            Metadata<'a>, // (
61            PsOrHierarchicalArrayIdentifier<'a>,
62            Metadata<'a>, // [
63            LoopVariables<'a>,
64            Metadata<'a>, // ]
65            Metadata<'a>, // )
66            Statement<'a>,
67        )>,
68    ),
69}
70
71#[derive(Clone, Debug, PartialEq)]
72pub enum ForInitialization<'a> {
73    VariableAssignment(Box<ListOfVariableAssignments<'a>>),
74    VariableDeclarations(
75        Box<(
76            ForVariableDeclaration<'a>,
77            Vec<(
78                Metadata<'a>, // ,
79                ForVariableDeclaration<'a>,
80            )>,
81        )>,
82    ),
83}
84
85#[derive(Clone, Debug, PartialEq)]
86pub struct ForVariableDeclaration<'a>(
87    pub Option<Metadata<'a>>, // var
88    pub DataType<'a>,
89    pub VariableIdentifier<'a>,
90    pub Metadata<'a>, // =
91    pub Expression<'a>,
92    pub  Vec<(
93        Metadata<'a>, // ,
94        VariableIdentifier<'a>,
95        Metadata<'a>, // =
96        Expression<'a>,
97    )>,
98);
99
100#[derive(Clone, Debug, PartialEq)]
101pub struct ForStep<'a>(
102    pub ForStepAssignment<'a>,
103    pub  Vec<(
104        Metadata<'a>, // ,
105        ForStepAssignment<'a>,
106    )>,
107);
108
109#[derive(Clone, Debug, PartialEq)]
110pub enum ForStepAssignment<'a> {
111    Operator(Box<OperatorAssignment<'a>>),
112    IncOrDec(Box<IncOrDecExpression<'a>>),
113    Function(Box<FunctionSubroutineCall<'a>>),
114}
115
116#[derive(Clone, Debug, PartialEq)]
117pub struct LoopVariables<'a>(
118    pub Option<IndexVariableIdentifier<'a>>,
119    pub  Vec<(
120        Metadata<'a>, // ,
121        Option<IndexVariableIdentifier<'a>>,
122    )>,
123);