diff options
Diffstat (limited to 'users/tazjin/rlox/src/interpreter.rs')
-rw-r--r-- | users/tazjin/rlox/src/interpreter.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/users/tazjin/rlox/src/interpreter.rs b/users/tazjin/rlox/src/interpreter.rs index 738542b6b85b..28eb23f9948c 100644 --- a/users/tazjin/rlox/src/interpreter.rs +++ b/users/tazjin/rlox/src/interpreter.rs @@ -128,6 +128,7 @@ impl Interpreter { Statement::Var(var) => return self.interpret_var(var), Statement::Block(block) => return self.interpret_block(block), Statement::If(if_stmt) => return self.interpret_if(if_stmt), + Statement::While(while_stmt) => return self.interpret_while(while_stmt), } Ok(()) @@ -172,6 +173,14 @@ impl Interpreter { } } + fn interpret_while<'a>(&mut self, stmt: &parser::While<'a>) -> Result<(), Error> { + while eval_truthy(&self.eval(&stmt.condition)?) { + self.interpret_stmt(&stmt.body)?; + } + + Ok(()) + } + fn eval<'a>(&mut self, expr: &Expr<'a>) -> Result<Literal, Error> { match expr { Expr::Assign(assign) => self.eval_assign(assign), |