scarf_syntax/declarations/
declaration_ranges.rs

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