diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index a8b9643..9bc04cc 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -179,6 +179,8 @@ mut_ref_px = { "&" ~ mutable } ref_px = { "&" } new_px = { "new" } +prefix_list = { prefix* } + expr = { - prefix* ~ primary ~ postfix* + prefix_list ~ primary ~ postfix* } diff --git a/parser/src/lib.rs b/parser/src/lib.rs index ebc85b3..d4e2c27 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -368,15 +368,10 @@ impl From> for Expression { match rule { Rule::expr => { - let mut prefixes = Vec::new(); - - while inner - .peek() - .map(|v| v.as_rule() == Rule::prefix) - .unwrap_or_default() - { - prefixes.push(Prefix::from(inner.next().unwrap())); - } + let prefixes: Vec = inner + .next() + .map(|p| p.into_inner().into_iter().map(Prefix::from).collect()) + .unwrap_or_default(); let exp = Expression::from(inner.next().unwrap());