Skip to main content

litex/execute/
exec_def_prop_stmt.rs

1use 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}