Skip to main content

microcad_lang/eval/call/
argument.rs

1// Copyright © 2025-2026 The µcad authors <info@microcad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! µcad value related evaluation entities
5
6use microcad_lang_base::PushDiag;
7
8use crate::{eval::*, lower::ir};
9
10impl Eval<ArgumentValue> for ir::Argument {
11    /// Evaluate `Argument` and return `ArgumentValue`
12    fn eval(&self, context: &mut EvalContext) -> EvalResult<ArgumentValue> {
13        use crate::lower::SingleIdentifier;
14
15        Ok(ArgumentValue::new(
16            match self.expression.eval(context) {
17                Ok(value) => value,
18                Err(err) => {
19                    context.error(self, err)?;
20                    Value::None
21                }
22            },
23            self.expression.single_identifier().cloned(),
24            self.src_ref.clone(),
25        ))
26    }
27}