litex/execute/
exec_define_params_with_set.rs1use crate::prelude::*;
2
3impl Runtime {
4 pub fn define_params_with_set(
5 &mut self,
6 param_def: &ParamGroupWithSet,
7 ) -> Result<InferResult, RuntimeError> {
8 self.define_params_with_set_in_scope(param_def, ParamObjType::FnSet)
9 }
10
11 pub fn define_params_with_set_in_scope(
12 &mut self,
13 param_def: &ParamGroupWithSet,
14 binding_scope: ParamObjType,
15 ) -> Result<InferResult, RuntimeError> {
16 self.verify_obj_well_defined_and_store_cache(¶m_def.set, &VerifyState::new(0, false))
17 .map_err(|well_defined_error| {
18 let param_names_text = param_def.params.join(", ");
19 let error_line_file = well_defined_error.line_file().clone();
20 RuntimeError::from(DefineParamsRuntimeError(RuntimeErrorStruct::new(
21 None,
22 format!(
23 "define params with set: failed to verify set well-defined for params [{}] with set {}",
24 param_names_text, param_def.set
25 ),
26 error_line_file,
27 Some(well_defined_error),
28 vec![],
29 )))
30 })?;
31 let mut infer_result = InferResult::new();
32 let facts = param_def.facts_for_binding_scope(binding_scope);
33 for (name, fact) in param_def.params.iter().zip(facts.iter()) {
34 self.store_free_param_or_identifier_name(name, binding_scope)
35 .map_err(|runtime_error| {
36 RuntimeError::from(DefineParamsRuntimeError(
37 RuntimeErrorStruct::new_with_msg_and_cause(
38 format!(
39 "define params with set: failed to declare parameter `{}`",
40 name
41 ),
42 runtime_error,
43 ),
44 ))
45 })?;
46 let fact_infer_result = self
47 .verify_well_defined_and_store_and_infer_with_default_verify_state(fact.clone())
48 .map_err(|store_fact_error| {
49 RuntimeError::from(DefineParamsRuntimeError(RuntimeErrorStruct::new_with_msg_and_cause(format!(
50 "define params with set: failed to store in-set fact for parameter `{}`",
51 name
52 ), store_fact_error)))
53 })?;
54 infer_result.new_infer_result_inside(fact_infer_result);
55 }
56 Ok(infer_result)
57 }
58}