Make usage of the $side metavariable

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-12 18:00:45 +01:00
parent 722e61cc85
commit 605798674f

View file

@ -655,32 +655,32 @@ fn parse_expression<'input>(
input: &mut Input<'input>,
) -> Result<TemplateAstExpr<'input>, AstError> {
macro_rules! infix {
($parser:expr => [ $($side:ident $val:tt => $prec:expr),* $(,)? ]) => {
($parser:expr => [ $($side:tt $val:tt => $prec:expr),* $(,)? ]) => {
dispatch! { surrounded(ws, parse_operator);
$(
TokenOperator::$val => Left($prec, |_, lhs, rhs| Ok(TemplateAstExpr::Operation { op: TokenOperator::$val, lhs: Box::new(lhs), rhs: Box::new(rhs) }))
TokenOperator::$val => $side($prec, |_, lhs, rhs| Ok(TemplateAstExpr::Operation { op: TokenOperator::$val, lhs: Box::new(lhs), rhs: Box::new(rhs) }))
),*
}
};
}
trace(
"expression",
expression(surrounded(ws, parse_operand)).infix(
infix! { surrounded(ws, parse_operator) => [
left Plus => 18,
left Minus => 18,
left Times => 20,
left Divide => 20,
left And => 10,
left Or => 7,
left Equal => 12,
left NotEqual => 12,
left Greater => 15,
left GreaterOrEqual => 15,
left Lesser => 15,
left LesserOrEqual => 15,
] },
),
expression(surrounded(ws, parse_operand)).infix(infix! {
surrounded(ws, parse_operator) => [
Left Plus => 18,
Left Minus => 18,
Left Times => 20,
Left Divide => 20,
Left And => 10,
Left Or => 7,
Left Equal => 12,
Left NotEqual => 12,
Left Greater => 15,
Left GreaterOrEqual => 15,
Left Lesser => 15,
Left LesserOrEqual => 15,
]
}),
)
.parse_next(input)
}