Skip to main content

scarf_syntax/expressions/
concatenations.rs

1// =======================================================================
2// concatenations.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.8.1
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct Concatenation<'a>(
9    pub Metadata<'a>, // {
10    pub Expression<'a>,
11    pub Vec<(Metadata<'a>, Expression<'a>)>,
12    pub Metadata<'a>, // }
13);
14
15#[derive(Clone, Debug, PartialEq)]
16pub struct ConstantConcatenation<'a>(
17    pub Metadata<'a>, // {
18    pub ConstantExpression<'a>,
19    pub Vec<(Metadata<'a>, ConstantExpression<'a>)>,
20    pub Metadata<'a>, // }
21);
22
23#[derive(Clone, Debug, PartialEq)]
24pub struct ConstantMultipleConcatenation<'a>(
25    pub Metadata<'a>, // {
26    pub ConstantExpression<'a>,
27    pub ConstantConcatenation<'a>,
28    pub Metadata<'a>, // }
29);
30
31#[derive(Clone, Debug, PartialEq)]
32pub struct ModulePathConcatenation<'a>(
33    pub Metadata<'a>, // {
34    pub ModulePathExpression<'a>,
35    pub Vec<(Metadata<'a>, ModulePathExpression<'a>)>,
36    pub Metadata<'a>, // }
37);
38
39#[derive(Clone, Debug, PartialEq)]
40pub struct ModulePathMultipleConcatenation<'a>(
41    pub Metadata<'a>, // {
42    pub ConstantExpression<'a>,
43    pub ModulePathConcatenation<'a>,
44    pub Metadata<'a>, // }
45);
46
47#[derive(Clone, Debug, PartialEq)]
48pub struct MultipleConcatenation<'a>(
49    pub Metadata<'a>, // {
50    pub Expression<'a>,
51    pub Concatenation<'a>,
52    pub Metadata<'a>, // }
53);
54
55#[derive(Clone, Debug, PartialEq)]
56pub struct StreamingConcatenation<'a>(
57    pub Metadata<'a>, // {
58    pub StreamOperator<'a>,
59    pub Option<SliceSize<'a>>,
60    pub StreamConcatenation<'a>,
61    pub Metadata<'a>, // }
62);
63
64#[derive(Clone, Debug, PartialEq)]
65pub enum StreamOperator<'a> {
66    Right(Metadata<'a>),
67    Left(Metadata<'a>),
68}
69
70#[derive(Clone, Debug, PartialEq)]
71pub enum SliceSize<'a> {
72    Simple(Box<SimpleType<'a>>),
73    ConstExpr(Box<ConstantExpression<'a>>),
74}
75
76#[derive(Clone, Debug, PartialEq)]
77pub struct StreamConcatenation<'a>(
78    pub Metadata<'a>, // {
79    pub StreamExpression<'a>,
80    pub  Vec<(
81        Metadata<'a>, // ,
82        StreamExpression<'a>,
83    )>,
84    pub Metadata<'a>, // }
85);
86
87#[derive(Clone, Debug, PartialEq)]
88pub struct StreamExpression<'a>(
89    pub Expression<'a>,
90    pub  Option<(
91        Metadata<'a>, // with
92        Metadata<'a>, // [
93        ArrayRangeExpression<'a>,
94        Metadata<'a>, // ]
95    )>,
96);
97
98#[derive(Clone, Debug, PartialEq)]
99pub enum ArrayRangeExpression<'a> {
100    Select(Box<Expression<'a>>),
101    Range(
102        Box<(
103            Expression<'a>,
104            Metadata<'a>, // :
105            Expression<'a>,
106        )>,
107    ),
108    PlusRange(
109        Box<(
110            Expression<'a>,
111            Metadata<'a>, // +:
112            Expression<'a>,
113        )>,
114    ),
115    MinusRange(
116        Box<(
117            Expression<'a>,
118            Metadata<'a>, // -:
119            Expression<'a>,
120        )>,
121    ),
122}
123
124#[derive(Clone, Debug, PartialEq)]
125pub struct EmptyUnpackedArrayConcatenation<'a>(
126    pub Metadata<'a>, // {
127    pub Metadata<'a>, // }
128);