Skip to main content

scarf_syntax/declarations/
let_declarations.rs

1// =======================================================================
2// let_declarations.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.2.12
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct LetDeclaration<'a>(
9    pub Metadata<'a>, // let
10    pub LetIdentifier<'a>,
11    pub  Option<(
12        Metadata<'a>, // (
13        Option<LetPortList<'a>>,
14        Metadata<'a>, // )
15    )>,
16    pub Metadata<'a>, // =
17    pub Expression<'a>,
18    pub Metadata<'a>, // ;
19);
20
21#[derive(Clone, Debug, PartialEq)]
22pub struct LetIdentifier<'a>(pub Identifier<'a>);
23
24#[derive(Clone, Debug, PartialEq)]
25pub struct LetPortList<'a>(
26    pub LetPortItem<'a>,
27    pub Vec<(Metadata<'a>, LetPortItem<'a>)>,
28);
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct LetPortItem<'a>(
32    pub Vec<AttributeInstance<'a>>,
33    pub LetFormalType<'a>,
34    pub FormalPortIdentifier<'a>,
35    pub Vec<VariableDimension<'a>>,
36    pub Option<(Metadata<'a>, Expression<'a>)>,
37);
38
39#[derive(Clone, Debug, PartialEq)]
40pub enum LetFormalType<'a> {
41    DataTypeOrImplicit(Box<DataTypeOrImplicit<'a>>),
42    Untyped(Box<Metadata<'a>>),
43}
44
45#[derive(Clone, Debug, PartialEq)]
46pub struct LetExpression<'a>(
47    pub Option<PackageScope<'a>>,
48    pub LetIdentifier<'a>,
49    pub  Option<(
50        Metadata<'a>, // (
51        Option<LetListOfArguments<'a>>,
52        Metadata<'a>, // )
53    )>,
54);
55
56#[derive(Clone, Debug, PartialEq)]
57pub struct LetListOfPartialIdentifierArguments<'a>(
58    pub Option<LetActualArg<'a>>,
59    pub Vec<(Metadata<'a>, Option<LetActualArg<'a>>)>,
60    pub  Vec<(
61        Metadata<'a>, // ,
62        Metadata<'a>, // .
63        Identifier<'a>,
64        Metadata<'a>, // (
65        Option<LetActualArg<'a>>,
66        Metadata<'a>, // )
67    )>,
68);
69
70#[derive(Clone, Debug, PartialEq)]
71pub struct LetListOfIdentifierArguments<'a>(
72    pub Metadata<'a>, // .
73    pub Identifier<'a>,
74    pub Metadata<'a>, // (
75    pub Option<LetActualArg<'a>>,
76    pub Metadata<'a>, // )
77    pub  Vec<(
78        Metadata<'a>, // ,
79        Metadata<'a>, // .
80        Identifier<'a>,
81        Metadata<'a>, // (
82        Option<LetActualArg<'a>>,
83        Metadata<'a>, // )
84    )>,
85);
86
87#[derive(Clone, Debug, PartialEq)]
88pub enum LetListOfArguments<'a> {
89    PartialIdentifier(Box<LetListOfPartialIdentifierArguments<'a>>),
90    Identifier(Box<LetListOfIdentifierArguments<'a>>),
91}
92
93#[derive(Clone, Debug, PartialEq)]
94pub struct LetActualArg<'a>(pub Expression<'a>);