Skip to main content

litex/execute/
exec_store_definitions.rs

1use crate::prelude::*;
2
3impl Runtime {
4    pub fn store_def_prop(&mut self, def_prop_stmt: &DefPropStmt) -> Result<(), RuntimeError> {
5        let name = def_prop_stmt.name.clone();
6        self.top_level_env()
7            .defined_def_props
8            .insert(name, def_prop_stmt.clone());
9        Ok(())
10    }
11
12    pub fn store_def_abstract_prop(
13        &mut self,
14        def_abstract_prop_stmt: &DefAbstractPropStmt,
15    ) -> Result<(), RuntimeError> {
16        let name = def_abstract_prop_stmt.name.clone();
17        self.top_level_env()
18            .defined_abstract_props
19            .insert(name, def_abstract_prop_stmt.clone());
20        Ok(())
21    }
22
23    pub fn store_def_algo(&mut self, def_algo_stmt: &DefAlgoStmt) -> Result<(), RuntimeError> {
24        let name = def_algo_stmt.name.clone();
25        self.top_level_env()
26            .defined_algorithms
27            .insert(name, def_algo_stmt.clone());
28        Ok(())
29    }
30
31    pub fn store_free_param_or_identifier_name(
32        &mut self,
33        name: &str,
34        kind: ParamObjType,
35    ) -> Result<(), RuntimeError> {
36        let env = self.top_level_env();
37        if let Some(existing_kind) = env.defined_identifiers.get(name) {
38            return Err(NameAlreadyUsedRuntimeError(RuntimeErrorStruct::new_with_just_msg(format!(
39                    "identifier `{}` is already bound in this scope as {:?} (cannot re-bind as {:?})",
40                    name, existing_kind, kind
41                )))
42            .into());
43        }
44        env.defined_identifiers.insert(name.to_string(), kind);
45        Ok(())
46    }
47
48    pub fn store_def_family(
49        &mut self,
50        def_family_stmt: &DefFamilyStmt,
51    ) -> Result<(), RuntimeError> {
52        let name = def_family_stmt.name.clone();
53        self.top_level_env()
54            .defined_families
55            .insert(name, def_family_stmt.clone());
56        Ok(())
57    }
58}