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_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}