Skip to main content

luaur_analysis/methods/
scope_lookup_scope_alt_b.rs

1use crate::records::scope::Scope;
2use crate::type_aliases::def_id_def::DefId;
3use crate::type_aliases::type_id::TypeId;
4
5impl Scope {
6    /// `std::optional<TypeId> Scope::lookup(DefId def) const` (Scope.cpp:98-110).
7    pub fn lookup_def_id(&self, def: DefId) -> Option<TypeId> {
8        let mut current: Option<&Scope> = Some(self);
9        while let Some(scope) = current {
10            if let Some(ty) = scope.rvalue_refinements.find(&def) {
11                return Some(*ty);
12            }
13            if let Some(ty) = scope.lvalue_types.find(&def) {
14                return Some(*ty);
15            }
16
17            current = scope.parent.as_ref().map(|scoped| scoped.as_ref());
18        }
19
20        None
21    }
22}