litex/verify/
verify_obj_satisfy_family.rs1use crate::prelude::*;
2
3impl Runtime {
4 pub fn verify_obj_satisfies_family(
5 &mut self,
6 obj: Obj,
7 family_ty: &FamilyObj,
8 verify_state: &VerifyState,
9 ) -> Result<StmtResult, RuntimeError> {
10 let family_name = family_ty.name.to_string();
11 let def =
12 match self.get_cloned_family_definition_by_name(&family_name) {
13 Some(d) => d,
14 None => {
15 return Err(VerifyRuntimeError(RuntimeErrorStruct::new_with_just_msg(
16 format!("family `{}` is not defined", family_name),
17 ))
18 .into());
19 }
20 };
21 let expected_count = def.params_def_with_type.number_of_params();
22 if family_ty.params.len() != expected_count {
23 return Err(
24 VerifyRuntimeError(RuntimeErrorStruct::new_with_just_msg(format!(
25 "family `{}` expects {} type argument(s), got {}",
26 family_name,
27 expected_count,
28 family_ty.params.len()
29 )))
30 .into(),
31 );
32 }
33 let param_to_arg_map = def
34 .params_def_with_type
35 .param_defs_and_args_to_param_to_arg_map(family_ty.params.as_slice());
36 let member_set =
37 self.inst_obj(&def.equal_to, ¶m_to_arg_map, ParamObjType::DefHeader)?;
38 let fact = InFact::new(obj, member_set, default_line_file()).into();
39 self.verify_atomic_fact(&fact, verify_state)
40 }
41}