sv_parser_parser/declarations/
declaration_assignments.rs1use crate::*;
2
3#[tracable_parser]
6#[packrat_parser]
7pub(crate) fn defparam_assignment(s: Span) -> IResult<Span, DefparamAssignment> {
8 let (s, a) = hierarchical_parameter_identifier(s)?;
9 let (s, b) = symbol("=")(s)?;
10 let (s, c) = constant_mintypmax_expression(s)?;
11 Ok((s, DefparamAssignment { nodes: (a, b, c) }))
12}
13
14#[tracable_parser]
15#[packrat_parser]
16pub(crate) fn net_decl_assignment(s: Span) -> IResult<Span, NetDeclAssignment> {
17 let (s, a) = net_identifier(s)?;
18 let (s, b) = many0(unpacked_dimension)(s)?;
19 let (s, c) = opt(pair(symbol("="), expression))(s)?;
20 Ok((s, NetDeclAssignment { nodes: (a, b, c) }))
21}
22
23#[tracable_parser]
24#[packrat_parser]
25pub(crate) fn param_assignment(s: Span) -> IResult<Span, ParamAssignment> {
26 let (s, a) = parameter_identifier(s)?;
27 let (s, b) = many0(unpacked_dimension)(s)?;
28 let (s, c) = opt(pair(symbol("="), constant_param_expression))(s)?;
29 Ok((s, ParamAssignment { nodes: (a, b, c) }))
30}
31
32#[tracable_parser]
33#[packrat_parser]
34pub(crate) fn specparam_assignment(s: Span) -> IResult<Span, SpecparamAssignment> {
35 alt((
36 specparam_assignment_mintypmax,
37 map(pulse_control_specparam, |x| {
38 SpecparamAssignment::PulseControlSpecparam(Box::new(x))
39 }),
40 ))(s)
41}
42
43#[tracable_parser]
44#[packrat_parser]
45pub(crate) fn specparam_assignment_mintypmax(s: Span) -> IResult<Span, SpecparamAssignment> {
46 let (s, a) = specparam_identifier(s)?;
47 let (s, b) = symbol("=")(s)?;
48 let (s, c) = constant_mintypmax_expression(s)?;
49 Ok((
50 s,
51 SpecparamAssignment::Mintypmax(Box::new(SpecparamAssignmentMintypmax { nodes: (a, b, c) })),
52 ))
53}
54
55#[tracable_parser]
56#[packrat_parser]
57pub(crate) fn type_assignment(s: Span) -> IResult<Span, TypeAssignment> {
58 let (s, a) = type_identifier(s)?;
59 let (s, b) = opt(pair(symbol("="), data_type))(s)?;
60 Ok((s, TypeAssignment { nodes: (a, b) }))
61}
62
63#[tracable_parser]
64#[packrat_parser]
65pub(crate) fn pulse_control_specparam(s: Span) -> IResult<Span, PulseControlSpecparam> {
66 alt((
67 pulse_control_specparam_without_descriptor,
68 pulse_control_specparam_with_descriptor,
69 ))(s)
70}
71
72#[tracable_parser]
73#[packrat_parser]
74pub(crate) fn pulse_control_specparam_without_descriptor(
75 s: Span,
76) -> IResult<Span, PulseControlSpecparam> {
77 let (s, a) = symbol("PATHPULSE$")(s)?;
78 let (s, b) = symbol("=")(s)?;
79 let (s, c) = paren(pair(
80 reject_limit_value,
81 opt(pair(symbol(","), error_limit_value)),
82 ))(s)?;
83 Ok((
84 s,
85 PulseControlSpecparam::WithoutDescriptor(Box::new(
86 PulseControlSpecparamWithoutDescriptor { nodes: (a, b, c) },
87 )),
88 ))
89}
90
91#[tracable_parser]
92#[packrat_parser]
93pub(crate) fn pulse_control_specparam_with_descriptor(
94 s: Span,
95) -> IResult<Span, PulseControlSpecparam> {
96 let (s, a) = symbol("PATHPULSE$")(s)?;
97 let (s, b) = specify_input_terminal_descriptor(s)?;
98 let (s, c) = symbol("$")(s)?;
99 let (s, d) = specify_output_terminal_descriptor(s)?;
100 let (s, e) = symbol("=")(s)?;
101 let (s, f) = paren(pair(
102 reject_limit_value,
103 opt(pair(symbol(","), error_limit_value)),
104 ))(s)?;
105 Ok((
106 s,
107 PulseControlSpecparam::WithDescriptor(Box::new(PulseControlSpecparamWithDescriptor {
108 nodes: (a, b, c, d, e, f),
109 })),
110 ))
111}
112
113#[tracable_parser]
114#[packrat_parser]
115pub(crate) fn error_limit_value(s: Span) -> IResult<Span, ErrorLimitValue> {
116 let (s, a) = limit_value(s)?;
117 Ok((s, ErrorLimitValue { nodes: (a,) }))
118}
119
120#[tracable_parser]
121#[packrat_parser]
122pub(crate) fn reject_limit_value(s: Span) -> IResult<Span, RejectLimitValue> {
123 let (s, a) = limit_value(s)?;
124 Ok((s, RejectLimitValue { nodes: (a,) }))
125}
126
127#[tracable_parser]
128#[packrat_parser]
129pub(crate) fn limit_value(s: Span) -> IResult<Span, LimitValue> {
130 let (s, a) = constant_mintypmax_expression(s)?;
131 Ok((s, LimitValue { nodes: (a,) }))
132}
133
134#[tracable_parser]
135#[packrat_parser]
136pub(crate) fn variable_decl_assignment(s: Span) -> IResult<Span, VariableDeclAssignment> {
137 alt((
138 variable_decl_assignment_dynamic_array,
139 variable_decl_assignment_class,
140 variable_decl_assignment_variable,
141 ))(s)
142}
143
144#[tracable_parser]
145#[packrat_parser]
146pub(crate) fn variable_decl_assignment_variable(s: Span) -> IResult<Span, VariableDeclAssignment> {
147 let (s, a) = variable_identifier(s)?;
148 let (s, b) = many0(variable_dimension)(s)?;
149 let (s, c) = opt(pair(symbol("="), expression))(s)?;
150 let (s, _) = not(peek(symbol("=")))(s)?;
151 Ok((
152 s,
153 VariableDeclAssignment::Variable(Box::new(VariableDeclAssignmentVariable {
154 nodes: (a, b, c),
155 })),
156 ))
157}
158
159#[tracable_parser]
160#[packrat_parser]
161pub(crate) fn variable_decl_assignment_dynamic_array(
162 s: Span,
163) -> IResult<Span, VariableDeclAssignment> {
164 let (s, a) = dynamic_array_variable_identifier(s)?;
165 let (s, b) = unsized_dimension(s)?;
166 let (s, c) = many0(variable_dimension)(s)?;
167 let (s, d) = opt(pair(symbol("="), dynamic_array_new))(s)?;
168 let (s, _) = not(peek(symbol("=")))(s)?;
169 Ok((
170 s,
171 VariableDeclAssignment::DynamicArray(Box::new(VariableDeclAssignmentDynamicArray {
172 nodes: (a, b, c, d),
173 })),
174 ))
175}
176
177#[tracable_parser]
178#[packrat_parser]
179pub(crate) fn variable_decl_assignment_class(s: Span) -> IResult<Span, VariableDeclAssignment> {
180 let (s, a) = class_variable_identifier(s)?;
181 let (s, b) = pair(symbol("="), class_new)(s)?;
182 Ok((
183 s,
184 VariableDeclAssignment::Class(Box::new(VariableDeclAssignmentClass { nodes: (a, b) })),
185 ))
186}
187
188#[tracable_parser]
189#[packrat_parser]
190pub(crate) fn class_new(s: Span) -> IResult<Span, ClassNew> {
191 alt((class_new_expression, class_new_argument))(s)
192}
193
194#[tracable_parser]
195#[packrat_parser]
196pub(crate) fn class_new_argument(s: Span) -> IResult<Span, ClassNew> {
197 let (s, a) = opt(class_scope)(s)?;
198 let (s, b) = keyword("new")(s)?;
199 let (s, c) = opt(paren(list_of_arguments))(s)?;
200 Ok((
201 s,
202 ClassNew::Argument(Box::new(ClassNewArgument { nodes: (a, b, c) })),
203 ))
204}
205
206#[tracable_parser]
207#[packrat_parser]
208pub(crate) fn class_new_expression(s: Span) -> IResult<Span, ClassNew> {
209 let (s, a) = keyword("new")(s)?;
210 let (s, b) = expression(s)?;
211 Ok((
212 s,
213 ClassNew::Expression(Box::new(ClassNewExpression { nodes: (a, b) })),
214 ))
215}
216
217#[tracable_parser]
218#[packrat_parser]
219pub(crate) fn dynamic_array_new(s: Span) -> IResult<Span, DynamicArrayNew> {
220 let (s, a) = keyword("new")(s)?;
221 let (s, b) = bracket(expression)(s)?;
222 let (s, c) = opt(paren(expression))(s)?;
223 Ok((s, DynamicArrayNew { nodes: (a, b, c) }))
224}