Skip to main content

litex/runtime/
runtime_get_definitions.rs

1use crate::prelude::*;
2
3impl Runtime {
4    pub fn get_prop_definition_by_name(&self, predicate_name: &str) -> Option<&DefPropStmt> {
5        let parts = predicate_name.split(MOD_SIGN).collect::<Vec<&str>>();
6        if parts.len() != 1 {
7            unimplemented!();
8        }
9
10        for environment in self.iter_environments_from_top() {
11            if let Some(definition) = environment.defined_def_props.get(predicate_name) {
12                return Some(definition);
13            }
14        }
15
16        None
17    }
18
19    /// Look up abstract prop (`abstract_prop` keyword) definition by name from current env or builtin.
20    pub fn get_abstract_prop_definition_by_name(
21        &self,
22        predicate_name: &str,
23    ) -> Option<&DefAbstractPropStmt> {
24        let parts = predicate_name.split(MOD_SIGN).collect::<Vec<&str>>();
25        if parts.len() != 1 {
26            unimplemented!();
27        }
28
29        for environment in self.iter_environments_from_top() {
30            if let Some(definition) = environment.defined_abstract_props.get(predicate_name) {
31                return Some(definition);
32            }
33        }
34
35        None
36    }
37
38    pub fn get_algo_definition_by_name(&self, algo_name: &str) -> Option<&DefAlgoStmt> {
39        for environment in self.iter_environments_from_top() {
40            if let Some(definition) = environment.defined_algorithms.get(algo_name) {
41                return Some(definition);
42            }
43        }
44        None
45    }
46
47    pub fn get_family_definition_by_name(&self, family_name: &str) -> Option<&DefFamilyStmt> {
48        let parts = family_name.split(MOD_SIGN).collect::<Vec<&str>>();
49        if parts.len() != 1 {
50            unimplemented!();
51        }
52
53        for environment in self.iter_environments_from_top() {
54            if let Some(definition) = environment.defined_families.get(family_name) {
55                return Some(definition);
56            }
57        }
58
59        None
60    }
61
62    pub fn get_cloned_family_definition_by_name(&self, family_name: &str) -> Option<DefFamilyStmt> {
63        let parts = family_name.split(MOD_SIGN).collect::<Vec<&str>>();
64        if parts.len() != 1 {
65            unimplemented!();
66        }
67
68        for environment in self.iter_environments_from_top() {
69            if let Some(definition) = environment.defined_families.get(family_name) {
70                return Some(definition.clone());
71            }
72        }
73
74        None
75    }
76}