From 77f1759b3bed5d723cf0d02f74c077084baa4c1d Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 14 Apr 2026 06:17:30 +0200 Subject: [PATCH] Working for loop --- src/parser/ast.rs | 2 +- src/parser/mod.rs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) 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 } +}