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_def_struct(
32        &mut self,
33        def_struct_stmt: &DefStructStmt,
34    ) -> Result<(), RuntimeError> {
35        let name = def_struct_stmt.name.clone();
36        self.top_level_env()
37            .defined_structs
38            .insert(name, def_struct_stmt.clone());
39        Ok(())
40    }
41
42    pub fn store_free_param_or_identifier_name(
43        &mut self,
44        name: &str,
45        kind: ParamObjType,
46    ) -> Result<(), RuntimeError> {
47        let env = self.top_level_env();
48        if let Some(existing_kind) = env.defined_identifiers.get(name) {
49            return Err(NameAlreadyUsedRuntimeError(RuntimeErrorStruct::new_with_just_msg(format!(
50                    "identifier `{}` is already bound in this scope as {:?} (cannot re-bind as {:?})",
51                    name, existing_kind, kind
52                )))
53            .into());
54        }
55        env.defined_identifiers.insert(name.to_string(), kind);
56        Ok(())
57    }
58
59    pub fn store_def_family(
60        &mut self,
61        def_family_stmt: &DefFamilyStmt,
62    ) -> Result<(), RuntimeError> {
63        let name = def_family_stmt.name.clone();
64        self.top_level_env()
65            .defined_families
66            .insert(name, def_family_stmt.clone());
67        Ok(())
68    }
69}