litex/execute/
exec_def_prop_stmt.rs1use crate::prelude::*;
2
3impl Runtime {
4 pub fn exec_def_prop_stmt(
5 &mut self,
6 def_prop_stmt: &DefPropStmt,
7 ) -> Result<StmtResult, RuntimeError> {
8 self.run_in_local_env(|rt| rt.def_prop_stmt_check_well_defined(def_prop_stmt))
9 .map_err(|e| short_exec_error(def_prop_stmt.clone().into(), "", Some(e), vec![]))?;
10 self.store_def_prop(def_prop_stmt)?;
11 Ok(
12 (NonFactualStmtSuccess::new(def_prop_stmt.clone().into(), InferResult::new(), vec![]))
13 .into(),
14 )
15 }
16
17 fn def_prop_stmt_check_well_defined(
18 &mut self,
19 def_prop_stmt: &DefPropStmt,
20 ) -> Result<(), RuntimeError> {
21 self.define_params_with_type(
22 &def_prop_stmt.params_def_with_type,
23 false,
24 ParamObjType::DefHeader,
25 )
26 .map_err(|e| short_exec_error(def_prop_stmt.clone().into(), "", Some(e), vec![]))?;
27
28 for fact in def_prop_stmt.iff_facts.iter() {
29 self.verify_fact_well_defined_and_store_and_infer(
30 fact.clone(),
31 &VerifyState::new(0, false),
32 )
33 .map_err(|inner_exec_error| {
34 short_exec_error(
35 def_prop_stmt.clone().into(),
36 "",
37 Some(inner_exec_error),
38 vec![],
39 )
40 })?;
41 }
42 Ok(())
43 }
44}