mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-03 05:54:33 +00:00
parent
6781db1588
commit
fd76f56ba4
4 changed files with 4 additions and 16 deletions
|
@ -418,7 +418,7 @@ impl<ASTBuilder: ASTBuildable, HIRBuilder: Buildable>
|
|||
let res = self.resolve(&mut ast, &cfg);
|
||||
debug_assert!(res.is_ok(), "{:?}", res.unwrap_err());
|
||||
log!(info "Dependency resolution process completed");
|
||||
println!("graph:\n{}", self.shared.graph.display());
|
||||
log!("graph:\n{}", self.shared.graph.display());
|
||||
if self.parse_errors.errors.is_empty() {
|
||||
self.shared.warns.extend(self.parse_errors.warns.flush());
|
||||
// continue analysis if ELS mode
|
||||
|
@ -838,12 +838,9 @@ impl<ASTBuilder: ASTBuildable, HIRBuilder: Buildable>
|
|||
write!(out, "Checking 0/{nmods}").unwrap();
|
||||
out.flush().unwrap();
|
||||
}
|
||||
println!("here?: {path}");
|
||||
let mut limit = 100000;
|
||||
while let Some(ancestor) = ancestors.pop() {
|
||||
if graph.ancestors(&ancestor).is_empty() {
|
||||
graph.remove(&ancestor);
|
||||
limit = 100000;
|
||||
if let Some(entry) = self.asts.remove(&ancestor) {
|
||||
if print_progress {
|
||||
let name = ancestor.file_name().unwrap_or_default().to_string_lossy();
|
||||
|
@ -864,10 +861,6 @@ impl<ASTBuilder: ASTBuildable, HIRBuilder: Buildable>
|
|||
self.build_inlined_module(&ancestor, graph);
|
||||
}
|
||||
} else {
|
||||
limit -= 1;
|
||||
if limit == 0 {
|
||||
panic!("{ancestor} is in a circular dependency");
|
||||
}
|
||||
ancestors.insert(0, ancestor);
|
||||
}
|
||||
}
|
||||
|
@ -950,7 +943,6 @@ impl<ASTBuilder: ASTBuildable, HIRBuilder: Buildable>
|
|||
}
|
||||
}
|
||||
};
|
||||
println!("Start to analyze {path}");
|
||||
if SINGLE_THREAD {
|
||||
run();
|
||||
self.shared.promises.mark_as_joined(path);
|
||||
|
|
|
@ -73,7 +73,7 @@ impl Context {
|
|||
}
|
||||
if self.shared.is_some() && self.promises().is_registered(&path) && !self.mod_cached(&path)
|
||||
{
|
||||
self.promises().join(&path).unwrap();
|
||||
let _result = self.promises().join(&path);
|
||||
}
|
||||
self.opt_mod_cache()?
|
||||
.raw_ref_ctx(&path)
|
||||
|
|
|
@ -340,7 +340,6 @@ impl SharedModuleCache {
|
|||
where
|
||||
NormalizedPathBuf: Borrow<Q>,
|
||||
{
|
||||
println!("343");
|
||||
let mut cache = loop {
|
||||
if let Some(cache) = self.0.try_borrow_mut() {
|
||||
break cache;
|
||||
|
|
|
@ -160,7 +160,6 @@ impl SharedPromises {
|
|||
}
|
||||
|
||||
pub fn wait_until_finished(&self, path: &NormalizedPathBuf) {
|
||||
println!("163");
|
||||
if self.promises.borrow().get(path).is_none() {
|
||||
panic!("not registered: {path}");
|
||||
}
|
||||
|
@ -180,11 +179,9 @@ impl SharedPromises {
|
|||
return Ok(());
|
||||
}
|
||||
if SINGLE_THREAD {
|
||||
println!("182: {path}");
|
||||
assert!(self.is_joined(path));
|
||||
return Ok(());
|
||||
}
|
||||
println!("!?: {path}");
|
||||
// Suppose A depends on B and C, and B depends on C.
|
||||
// In this case, B must join C before A joins C. Otherwise, a deadlock will occur.
|
||||
let children = self.graph.children(path);
|
||||
|
@ -226,14 +223,14 @@ impl SharedPromises {
|
|||
paths.push(path.clone());
|
||||
}
|
||||
for path in paths {
|
||||
self.join(&path).unwrap();
|
||||
let _result = self.join(&path);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn join_all(&self) {
|
||||
let paths = self.promises.borrow().keys().cloned().collect::<Vec<_>>();
|
||||
for path in paths {
|
||||
self.join(&path).unwrap();
|
||||
let _result = self.join(&path);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue