microcad_lang/eval/statements/return_statement.rs
1// Copyright © 2025 The µcad authors <info@ucad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4use crate::eval::*;
5
6impl Eval<Value> for ReturnStatement {
7 fn eval(&self, context: &mut EvalContext) -> EvalResult<Value> {
8 self.grant(context)?;
9 log::debug!("Evaluating return statement to value: {self}");
10 if let Some(result) = &self.result {
11 let result = result.eval(context)?;
12 log::debug!("returning {result}");
13 Ok(Value::Return(Box::new(result)))
14 } else {
15 Ok(Value::Return(Value::None.into()))
16 }
17 }
18}