ralix 0.2.0

A simple, type-safe, tree walking interpreter
use crate::{EvalResult, Evaluator, Value, Statement};

impl Evaluator<'_> {
    pub fn evaluate_scope_expression(&mut self, statements: Vec<Statement>) -> EvalResult<Value> {
        let mut result = EvalResult::NoValue;

        self.ctx.enter_scope();
        for s in statements {
            result = self.evaluate_statement(s);

            match &result {
                EvalResult::Value(_) => {}
                EvalResult::NoValue => {}
                EvalResult::Return(_) => {
                    self.ctx.leave_scope();
                    return result;
                }
                EvalResult::Err(err) => self.err(err),
            }
        }
        self.ctx.leave_scope();

        result
    }
}