summaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2024-04-28 19:09:17 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2024-04-28 19:09:17 +0200
commitbe5d202e433b2e83f1f16ce8fac26a3ca2631189 (patch)
tree4f03e9e45de1a8e7a26c593fc541a9b11a177188 /crates
parenta4463b431904c0307135cc311674f0698b3d0946 (diff)
downloadrebel-be5d202e433b2e83f1f16ce8fac26a3ca2631189.tar
rebel-be5d202e433b2e83f1f16ce8fac26a3ca2631189.zip
rebel-parse: grammar: order combined assignment operations
Test for more frequent operations earlier.
Diffstat (limited to 'crates')
-rw-r--r--crates/rebel-parse/src/grammar/recipe.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/crates/rebel-parse/src/grammar/recipe.rs b/crates/rebel-parse/src/grammar/recipe.rs
index fedc8a8..5d308e0 100644
--- a/crates/rebel-parse/src/grammar/recipe.rs
+++ b/crates/rebel-parse/src/grammar/recipe.rs
@@ -27,24 +27,24 @@ peg::parser! {
= body:body_stmt() ++ p(';') { ast::Body(body) }
pub rule body_stmt() -> ast::BodyStmt<'a>
- = dest:typed_expr() p2('=', '+') expr:expr() {
- ast::BodyStmt::assign(dest, Some(Add), true, expr)
- }
- / dest:typed_expr() op:assign_op() expr:expr() {
+ = dest:typed_expr() op:assign_op() expr:expr() {
ast::BodyStmt::assign(dest, op, false, expr)
}
+ / dest:typed_expr() p2('=', '+') expr:expr() {
+ ast::BodyStmt::assign(dest, Some(Add), true, expr)
+ }
/ expr:expr() {
ast::BodyStmt::Expr { expr: Box::new(expr) }
}
/ { ast::BodyStmt::Empty }
rule assign_op() -> Option<ast::OpBinary>
- = p2('+', '=') { Some(Add) }
+ = p('=') { None }
+ / p2('+', '=') { Some(Add) }
/ p2('-', '=') { Some(Sub) }
/ p2('*', '=') { Some(Mul) }
/ p2('/', '=') { Some(Div) }
/ p2('%', '=') { Some(Rem) }
- / p('=') { None }
rule typed_expr() -> ast::TypedExpr<'a>
= expr:expr() typ:tagged(<p(':')>, <expr()>)? { ast::TypedExpr { expr, typ } }