Skip to main content

scarf_syntax/declarations/
declaration_ranges.rs

1// =======================================================================
2// declaration_ranges.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.2.5
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum UnpackedDimension<'a> {
9    UnpackedRange(
10        Box<(
11            Metadata<'a>, // [
12            ConstantRange<'a>,
13            Metadata<'a>, // ]
14        )>,
15    ),
16    UnpackedExpression(
17        Box<(
18            Metadata<'a>, // [
19            ConstantExpression<'a>,
20            Metadata<'a>, // ]
21        )>,
22    ),
23}
24
25#[derive(Clone, Debug, PartialEq)]
26pub enum PackedDimension<'a> {
27    PackedRange(
28        Box<(
29            Metadata<'a>, // [
30            ConstantRange<'a>,
31            Metadata<'a>, // ]
32        )>,
33    ),
34    UnsizedDimension(Box<UnsizedDimension<'a>>),
35}
36
37#[derive(Clone, Debug, PartialEq)]
38pub enum AssociativeDimension<'a> {
39    Data(
40        Box<(
41            Metadata<'a>, // [
42            DataType<'a>,
43            Metadata<'a>, // ]
44        )>,
45    ),
46    Star(
47        Box<(
48            Metadata<'a>, // [
49            Metadata<'a>, // *
50            Metadata<'a>, // ]
51        )>,
52    ),
53}
54
55#[derive(Clone, Debug, PartialEq)]
56pub enum VariableDimension<'a> {
57    UnsizedDimension(Box<UnsizedDimension<'a>>),
58    UnpackedDimension(Box<UnpackedDimension<'a>>),
59    AssociativeDimension(Box<AssociativeDimension<'a>>),
60    QueueDimension(Box<QueueDimension<'a>>),
61}
62
63#[derive(Clone, Debug, PartialEq)]
64pub struct QueueDimension<'a>(
65    pub Metadata<'a>, // [
66    pub Metadata<'a>, // $
67    pub Option<(Metadata<'a>, ConstantExpression<'a>)>,
68    pub Metadata<'a>, // ]
69);
70
71#[derive(Clone, Debug, PartialEq)]
72pub struct UnsizedDimension<'a>(
73    pub Metadata<'a>, // [
74    pub Metadata<'a>, // ]
75);