scarf_parser/parser/declarations/
declaration_assignments.rs1use crate::*;
7use chumsky::prelude::*;
8use scarf_syntax::*;
9
10pub fn param_assignment_parser<'a, I>() -> impl Parser<'a, I, ParamAssignment<'a>, ParserError<'a>>
11where
12 I: ValueInput<'a, Token = Token<'a>, Span = ParserSpan>,
13{
14 parameter_identifier_parser()
15 .then(
16 variable_dimension_parser()
17 .repeated()
18 .collect::<Vec<VariableDimension<'a>>>(),
19 )
20 .then(
21 token(Token::Eq)
22 .then(constant_param_expression_parser())
23 .or_not(),
24 )
25 .map(|((a, b), c)| ParamAssignment(a, b, c))
26}
27
28pub fn type_assignment_parser<'a, I>() -> impl Parser<'a, I, TypeAssignment<'a>, ParserError<'a>>
29where
30 I: ValueInput<'a, Token = Token<'a>, Span = ParserSpan>,
31{
32 type_identifier_parser()
33 .then(
34 token(Token::Eq)
35 .then(data_type_or_implicit_parser())
36 .or_not(),
37 )
38 .map(|(a, b)| TypeAssignment(a, b))
39}