microcad_lang/eval/
init.rs1use microcad_lang_base::PushDiag;
5
6use crate::{eval::*, model::*, syntax::*};
7
8impl InitDefinition {
9 pub fn eval(&self, non_property_args: Tuple, context: &mut EvalContext) -> EvalResult<()> {
11 let model = context.get_model()?;
12 context.scope(StackFrame::Init(non_property_args.into()), |context| {
13 let _: Value = self.body.statements.eval(context)?;
14
15 if let Some(properties) = model.borrow().get_properties() {
16 let missing: IdentifierList = properties
17 .iter()
18 .filter(|(_, value)| value.is_invalid())
19 .map(|(id, _)| id.clone())
20 .collect();
21
22 if !missing.is_empty() {
23 context.error(self, EvalError::BuildingPlanIncomplete(missing))?;
24 }
25 }
26
27 Ok(())
28 })
29 }
30}