Skip to main content

scarf_syntax/declarations/
declaration_assignments.rs

1// =======================================================================
2// declaration_assignments.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.2.4
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct DefparamAssignment<'a>(
9    pub HierarchicalParameterIdentifier<'a>,
10    pub Metadata<'a>, // =
11    pub ConstantMintypmaxExpression<'a>,
12);
13
14#[derive(Clone, Debug, PartialEq)]
15pub struct NetDeclAssignment<'a>(
16    pub NetIdentifier<'a>,
17    pub Vec<UnpackedDimension<'a>>,
18    pub  Option<(
19        Metadata<'a>, // =
20        Expression<'a>,
21    )>,
22);
23
24#[derive(Clone, Debug, PartialEq)]
25pub struct ParamAssignment<'a>(
26    pub ParameterIdentifier<'a>,
27    pub Vec<VariableDimension<'a>>,
28    pub  Option<(
29        Metadata<'a>, // =
30        ConstantParamExpression<'a>,
31    )>,
32);
33
34#[derive(Clone, Debug, PartialEq)]
35pub enum SpecparamAssignment<'a> {
36    Base(
37        Box<(
38            SpecparamIdentifier<'a>,
39            Metadata<'a>, // =
40            ConstantMintypmaxExpression<'a>,
41        )>,
42    ),
43    Pulse(Box<PulseControlSpecparam<'a>>),
44}
45
46// Note that the syntax for path-specific pulses isn't parsed fully.
47// This is due to the complexity on the parsing side, as the current
48// parser cannot (with current limitations of logos) distinguish
49// between the long pulse path and a long identifier, since the
50// tokens are concatenated
51#[derive(Clone, Debug, PartialEq)]
52pub enum PulseControlSpecparam<'a> {
53    NonpathSpecific(
54        Box<(
55            Metadata<'a>, // PATHPULSE$
56            Metadata<'a>, // =
57            Metadata<'a>, // (
58            RejectLimitValue<'a>,
59            Option<(
60                Metadata<'a>, // ,
61                ErrorLimitValue<'a>,
62            )>,
63            Metadata<'a>, // )
64        )>,
65    ),
66    PathSpecific(
67        Box<(
68            Identifier<'a>, // PATHPULSE$<input>$<output> - see above
69            Metadata<'a>,   // =
70            Metadata<'a>,   // (
71            RejectLimitValue<'a>,
72            Option<(
73                Metadata<'a>, // ,
74                ErrorLimitValue<'a>,
75            )>,
76            Metadata<'a>, // )
77        )>,
78    ),
79}
80
81#[derive(Clone, Debug, PartialEq)]
82pub struct ErrorLimitValue<'a>(pub LimitValue<'a>);
83
84#[derive(Clone, Debug, PartialEq)]
85pub struct RejectLimitValue<'a>(pub LimitValue<'a>);
86
87#[derive(Clone, Debug, PartialEq)]
88pub struct LimitValue<'a>(pub ConstantMintypmaxExpression<'a>);
89
90#[derive(Clone, Debug, PartialEq)]
91pub struct TypeAssignment<'a>(
92    pub TypeIdentifier<'a>,
93    pub Option<(Metadata<'a>, DataTypeOrIncompleteClassScopedType<'a>)>,
94);
95
96#[derive(Clone, Debug, PartialEq)]
97pub enum VariableDeclAssignment<'a> {
98    Variable(
99        Box<(
100            VariableIdentifier<'a>,
101            Vec<VariableDimension<'a>>,
102            Option<(
103                Metadata<'a>, // =
104                Expression<'a>,
105            )>,
106        )>,
107    ),
108    DynamicVariable(
109        Box<(
110            DynamicArrayVariableIdentifier<'a>,
111            UnsizedDimension<'a>,
112            Vec<VariableDimension<'a>>,
113            Option<(
114                Metadata<'a>, // =
115                DynamicArrayNew<'a>,
116            )>,
117        )>,
118    ),
119    ClassVariable(
120        Box<(
121            ClassVariableIdentifier<'a>,
122            Option<(
123                Metadata<'a>, // =
124                ClassNew<'a>,
125            )>,
126        )>,
127    ),
128}
129
130#[derive(Clone, Debug, PartialEq)]
131pub enum ClassNew<'a> {
132    Args(
133        Box<(
134            Option<ClassScope<'a>>,
135            Metadata<'a>, // new
136            Option<(
137                Metadata<'a>, // (
138                ListOfArguments<'a>,
139                Metadata<'a>, // )
140            )>,
141        )>,
142    ),
143    Expression(
144        Box<(
145            Metadata<'a>, // new
146            Expression<'a>,
147        )>,
148    ),
149}
150
151#[derive(Clone, Debug, PartialEq)]
152pub struct DynamicArrayNew<'a>(
153    pub Metadata<'a>, // new
154    pub Metadata<'a>, // [
155    pub Expression<'a>,
156    pub Metadata<'a>, // ]
157    pub  Option<(
158        Metadata<'a>, // (
159        Expression<'a>,
160        Metadata<'a>, // )
161    )>,
162);