diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-01-27 18:13:32 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-01-27 18:13:32 +0100 |
commit | 2de44d3fea66298e55ac98568e20b9baa2b601f3 (patch) | |
tree | 0a52d2f7c707b3de41ba53ba49930f58ba81610f /src | |
parent | 81fccdc0ec42a97f8c3e4fa905af7759742a73f9 (diff) | |
download | rebel-2de44d3fea66298e55ac98568e20b9baa2b601f3.tar rebel-2de44d3fea66298e55ac98568e20b9baa2b601f3.zip |
resolve: debug_assert task state more frequently
Diffstat (limited to 'src')
-rw-r--r-- | src/resolve.rs | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/resolve.rs b/src/resolve.rs index d7ce52d..ec2ec1a 100644 --- a/src/resolve.rs +++ b/src/resolve.rs @@ -72,7 +72,16 @@ impl<'a> Resolver<'a> { } } - pub fn add_goal(&mut self, task: &TaskRef) -> Result<()> { + fn tasks_resolved(&self) -> bool { + for (_, resolved) in &self.resolve_state { + if *resolved != ResolveState::Resolved { + return false; + } + } + true + } + + pub fn add_task(&mut self, task: &TaskRef) -> Result<()> { match self.resolve_state.get(task) { Some(ResolveState::Resolving) => { return Err(Error::DependencyCycle(vec![task.clone()])) @@ -90,7 +99,7 @@ impl<'a> Resolver<'a> { .insert(task.clone(), ResolveState::Resolving); for dep in &task_def.depends { - let res = self.add_goal(dep); + let res = self.add_task(dep); if let Err(mut error) = res { self.resolve_state.remove(task); @@ -108,16 +117,14 @@ impl<'a> Resolver<'a> { Ok(()) } + pub fn add_goal(&mut self, task: &TaskRef) -> Result<()> { + self.add_task(task)?; + debug_assert!(self.tasks_resolved()); + Ok(()) + } + pub fn to_taskset(self) -> HashSet<TaskRef> { - fn tasks_resolved(this: &Resolver) -> bool { - for (_, resolved) in &this.resolve_state { - if *resolved != ResolveState::Resolved { - return false; - } - } - true - } - debug_assert!(tasks_resolved(&self)); + debug_assert!(self.tasks_resolved()); self.resolve_state .into_iter() |