Skip to main content

scarf_syntax/behavioral_statements/
parallel_and_sequential_blocks.rs

1// =======================================================================
2// parallel_and_sequential_blocks.rs
3// =======================================================================
4//! CST Nodes from 1800-2023 A.6.3
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum ActionBlock<'a> {
9    Basic(Box<StatementOrNull<'a>>),
10    Conditional(
11        Box<(
12            Option<Statement<'a>>,
13            Metadata<'a>, // else
14            StatementOrNull<'a>,
15        )>,
16    ),
17}
18
19#[derive(Clone, Debug, PartialEq)]
20pub struct SeqBlock<'a>(
21    pub Metadata<'a>, // begin
22    pub  Option<(
23        Metadata<'a>, // :
24        BlockIdentifier<'a>,
25    )>,
26    pub Vec<BlockItemDeclaration<'a>>,
27    pub Vec<StatementOrNull<'a>>,
28    pub Metadata<'a>, // end
29    pub  Option<(
30        Metadata<'a>, // :
31        BlockIdentifier<'a>,
32    )>,
33);
34
35#[derive(Clone, Debug, PartialEq)]
36pub struct ParBlock<'a>(
37    pub Metadata<'a>, // fork
38    pub  Option<(
39        Metadata<'a>, // :
40        BlockIdentifier<'a>,
41    )>,
42    pub Vec<BlockItemDeclaration<'a>>,
43    pub Vec<StatementOrNull<'a>>,
44    pub JoinKeyword<'a>,
45    pub  Option<(
46        Metadata<'a>, // :
47        BlockIdentifier<'a>,
48    )>,
49);
50
51#[derive(Clone, Debug, PartialEq)]
52pub enum JoinKeyword<'a> {
53    Join(Metadata<'a>),
54    JoinAny(Metadata<'a>),
55    JoinNone(Metadata<'a>),
56}