diff --git a/src/parser/ast.rs b/src/parser/ast.rs index 08e305d..63d7e24 100644 --- a/src/parser/ast.rs +++ b/src/parser/ast.rs @@ -92,7 +92,7 @@ pub enum Statement { For { init: (VarKind, String, Option), condition: Option, - update: Option, + update: Option>, body: Box, }, diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4fb42c3..c000532 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -257,13 +257,13 @@ impl Statement { .unwrap(); let condition = inner.next().map(Expression::from_pair); - let update = inner.next().map(Expression::from_pair); + let update = inner.next().map(parse_var_assign_no_semicolon); let body = Statement::from_pair(inner.next().unwrap()); Statement::For { init, - condition: None, - update: None, + condition, + update: update.map(Box::new), body: Box::new(body), } } @@ -370,3 +370,11 @@ impl Postfix { } } } + +fn parse_var_assign_no_semicolon(pair: pest::iterators::Pair) -> Statement { + let mut inner = pair.into_inner(); + let target = Expression::from_pair(inner.next().unwrap()); + let value = Expression::from_pair(inner.next().unwrap()); + + Statement::VarAssign { target, value } +}