in checker/src/body_visitor.rs [549:579]
fn lookup_weak_value(
&mut self,
key_qualifier: &Rc<Path>,
_key_index: &Rc<AbstractValue>,
) -> Option<Rc<AbstractValue>> {
if self.analyzing_static_var {
return None;
}
for (path, value) in self.current_environment.value_map.iter() {
if let PathEnum::QualifiedPath {
qualifier,
selector,
..
} = &path.value
{
if let PathSelector::Slice(..) = selector.as_ref() {
if value.expression.infer_type().is_primitive() && key_qualifier.eq(qualifier) {
// This is the supported case for arrays constructed via a repeat expression.
// We assume that index is in range since that has already been checked.
// todo: deal with the case where there is another path that aliases the slice.
// i.e. a situation that arises if a repeat initialized array has been updated
// with an index that is not an exact match for key_index.
return Some(value.clone());
}
}
// todo: deal with PathSelector::Index when there is a possibility that
// key_index might match it at runtime.
}
}
None
}