scarf_syntax/behavioral_statements/
looping_statements.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum LoopStatement<'a> {
9 Forever(
10 Box<(
11 Metadata<'a>, StatementOrNull<'a>,
13 )>,
14 ),
15 Repeat(
16 Box<(
17 Metadata<'a>, Metadata<'a>, Expression<'a>,
20 Metadata<'a>, StatementOrNull<'a>,
22 )>,
23 ),
24 While(
25 Box<(
26 Metadata<'a>, Metadata<'a>, Expression<'a>,
29 Metadata<'a>, StatementOrNull<'a>,
31 )>,
32 ),
33 For(
34 Box<(
35 Metadata<'a>, Metadata<'a>, Option<ForInitialization<'a>>,
38 Metadata<'a>, Option<Expression<'a>>,
40 Metadata<'a>, Option<ForStep<'a>>,
42 Metadata<'a>, StatementOrNull<'a>,
44 )>,
45 ),
46 DoWhile(
47 Box<(
48 Metadata<'a>, StatementOrNull<'a>,
50 Metadata<'a>, Metadata<'a>, Expression<'a>,
53 Metadata<'a>, Metadata<'a>, )>,
56 ),
57 Foreach(
58 Box<(
59 Metadata<'a>, Metadata<'a>, PsOrHierarchicalArrayIdentifier<'a>,
62 Metadata<'a>, LoopVariables<'a>,
64 Metadata<'a>, Metadata<'a>, 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>, ForVariableDeclaration<'a>,
80 )>,
81 )>,
82 ),
83}
84
85#[derive(Clone, Debug, PartialEq)]
86pub struct ForVariableDeclaration<'a>(
87 pub Option<Metadata<'a>>, pub DataType<'a>,
89 pub VariableIdentifier<'a>,
90 pub Metadata<'a>, pub Expression<'a>,
92 pub Vec<(
93 Metadata<'a>, VariableIdentifier<'a>,
95 Metadata<'a>, Expression<'a>,
97 )>,
98);
99
100#[derive(Clone, Debug, PartialEq)]
101pub struct ForStep<'a>(
102 pub ForStepAssignment<'a>,
103 pub Vec<(
104 Metadata<'a>, 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>, Option<IndexVariableIdentifier<'a>>,
122 )>,
123);