use microcad_lang_base::PushDiag;
use crate::{eval::*, lower::ir, model::*};
impl ir::InitDefinition {
pub fn eval(&self, non_property_args: Tuple, context: &mut EvalContext) -> EvalResult<()> {
let model = context.get_model()?;
context.scope(StackFrame::Init(non_property_args.into()), |context| {
let _: Value = self.body.statements.eval(context)?;
if let Some(properties) = model.borrow().get_properties() {
let missing: ir::IdentifierList = properties
.iter()
.filter(|(_, value)| value.is_invalid())
.map(|(id, _)| id.clone())
.collect();
if !missing.is_empty() {
context.error(self, EvalError::BuildingPlanIncomplete(missing))?;
}
}
Ok(())
})
}
}