scarf_syntax/declarations/
let_declarations.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct LetDeclaration<'a>(
9 pub Metadata<'a>, pub LetIdentifier<'a>,
11 pub Option<(
12 Metadata<'a>, Option<LetPortList<'a>>,
14 Metadata<'a>, )>,
16 pub Metadata<'a>, pub Expression<'a>,
18 pub Metadata<'a>, );
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>, Option<LetListOfArguments<'a>>,
52 Metadata<'a>, )>,
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>, Metadata<'a>, Identifier<'a>,
64 Metadata<'a>, Option<LetActualArg<'a>>,
66 Metadata<'a>, )>,
68);
69
70#[derive(Clone, Debug, PartialEq)]
71pub struct LetListOfIdentifierArguments<'a>(
72 pub Metadata<'a>, pub Identifier<'a>,
74 pub Metadata<'a>, pub Option<LetActualArg<'a>>,
76 pub Metadata<'a>, pub Vec<(
78 Metadata<'a>, Metadata<'a>, Identifier<'a>,
81 Metadata<'a>, Option<LetActualArg<'a>>,
83 Metadata<'a>, )>,
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>);