mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 04:09:05 +00:00
fix: errors in other modules are ignored
This commit is contained in:
parent
7ba874a85c
commit
eaeb659a7d
13 changed files with 214 additions and 75 deletions
|
@ -6,6 +6,7 @@ use erg_common::dict::Dict;
|
|||
use erg_common::set;
|
||||
use erg_common::set::Set;
|
||||
use erg_common::shared::{MappedRwLockReadGuard, RwLockReadGuard, Shared};
|
||||
use erg_common::Str;
|
||||
|
||||
use crate::varinfo::{AbsLocation, VarInfo};
|
||||
|
||||
|
@ -25,8 +26,9 @@ impl<'a> Members<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ModuleIndexValue {
|
||||
pub name: Str,
|
||||
pub vi: VarInfo,
|
||||
pub referrers: Set<AbsLocation>,
|
||||
}
|
||||
|
@ -38,8 +40,12 @@ impl fmt::Display for ModuleIndexValue {
|
|||
}
|
||||
|
||||
impl ModuleIndexValue {
|
||||
pub const fn new(vi: VarInfo, referrers: Set<AbsLocation>) -> Self {
|
||||
Self { vi, referrers }
|
||||
pub const fn new(name: Str, vi: VarInfo, referrers: Set<AbsLocation>) -> Self {
|
||||
Self {
|
||||
name,
|
||||
vi,
|
||||
referrers,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn push_ref(&mut self, referrer: AbsLocation) {
|
||||
|
@ -65,19 +71,19 @@ impl ModuleIndex {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn inc_ref(&mut self, vi: &VarInfo, referrer: AbsLocation) {
|
||||
pub fn inc_ref(&mut self, name: &Str, vi: &VarInfo, referrer: AbsLocation) {
|
||||
let referee = vi.def_loc.clone();
|
||||
if let Some(referrers) = self.members.get_mut(&referee) {
|
||||
referrers.push_ref(referrer);
|
||||
} else {
|
||||
let value = ModuleIndexValue::new(vi.clone(), set! {referrer});
|
||||
let value = ModuleIndexValue::new(name.clone(), vi.clone(), set! {referrer});
|
||||
self.members.insert(referee, value);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn register(&mut self, vi: &VarInfo) {
|
||||
pub fn register(&mut self, name: Str, vi: &VarInfo) {
|
||||
let referee = vi.def_loc.clone();
|
||||
let value = ModuleIndexValue::new(vi.clone(), set! {});
|
||||
let value = ModuleIndexValue::new(name, vi.clone(), set! {});
|
||||
self.members.insert(referee, value);
|
||||
}
|
||||
|
||||
|
@ -90,8 +96,12 @@ impl ModuleIndex {
|
|||
}
|
||||
|
||||
pub fn remove_path(&mut self, path: &Path) {
|
||||
self.members
|
||||
.retain(|loc, _| loc.module.as_deref() != Some(path));
|
||||
self.members.retain(|loc, value| {
|
||||
value
|
||||
.referrers
|
||||
.retain(|ref_loc| ref_loc.module.as_deref() != Some(path));
|
||||
loc.module.as_deref() != Some(path)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,12 +119,12 @@ impl SharedModuleIndex {
|
|||
Self(Shared::new(ModuleIndex::new()))
|
||||
}
|
||||
|
||||
pub fn inc_ref(&self, vi: &VarInfo, referrer: AbsLocation) {
|
||||
self.0.borrow_mut().inc_ref(vi, referrer);
|
||||
pub fn inc_ref(&self, name: &Str, vi: &VarInfo, referrer: AbsLocation) {
|
||||
self.0.borrow_mut().inc_ref(name, vi, referrer);
|
||||
}
|
||||
|
||||
pub fn register(&self, vi: &VarInfo) {
|
||||
self.0.borrow_mut().register(vi);
|
||||
pub fn register(&self, name: Str, vi: &VarInfo) {
|
||||
self.0.borrow_mut().register(name, vi);
|
||||
}
|
||||
|
||||
pub fn get_refs(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue