litex/execute/
exec_store_definitions.rs1use 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}