luaur_analysis/methods/
scope_lookup_ex_scope.rs1use crate::records::def::Def;
2use crate::records::scope::Scope;
3use crate::type_aliases::def_id_def::DefId;
4use crate::type_aliases::type_id::TypeId;
5
6impl Scope {
7 pub fn lookup_ex_def_id(&mut self, def: DefId) -> Option<(TypeId, *mut Scope)> {
8 let mut s: *mut Scope = self as *mut Scope;
9
10 loop {
11 let lvalue_types = unsafe { &(*s).lvalue_types };
12 if let Some(type_id) = lvalue_types.get(&def) {
13 return Some((*type_id, s));
14 }
15
16 let rvalue_refinements = unsafe { &(*s).rvalue_refinements };
17 if let Some(type_id) = rvalue_refinements.get(&def) {
18 return Some((*type_id, s));
19 }
20
21 let parent = unsafe { &(*s).parent };
22 match parent {
23 Some(parent_scope) => {
24 s = parent_scope.as_ref() as *const Scope as *mut Scope;
25 }
26 None => {
27 return None;
28 }
29 }
30 }
31 }
32}