mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Only compute Obligation cache_key
once in register_obligation_at
This commit is contained in:
parent
0309953232
commit
4bd5505718
@ -336,12 +336,13 @@ impl<O: ForestObligation> ObligationForest<O> {
|
||||
|
||||
// Returns Err(()) if we already know this obligation failed.
|
||||
fn register_obligation_at(&mut self, obligation: O, parent: Option<usize>) -> Result<(), ()> {
|
||||
if self.done_cache.contains(&obligation.as_cache_key()) {
|
||||
let cache_key = obligation.as_cache_key();
|
||||
if self.done_cache.contains(&cache_key) {
|
||||
debug!("register_obligation_at: ignoring already done obligation: {:?}", obligation);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match self.active_cache.entry(obligation.as_cache_key()) {
|
||||
match self.active_cache.entry(cache_key.clone()) {
|
||||
Entry::Occupied(o) => {
|
||||
let node = &mut self.nodes[*o.get()];
|
||||
if let Some(parent_index) = parent {
|
||||
@ -365,7 +366,7 @@ impl<O: ForestObligation> ObligationForest<O> {
|
||||
&& self
|
||||
.error_cache
|
||||
.get(&obligation_tree_id)
|
||||
.map(|errors| errors.contains(&obligation.as_cache_key()))
|
||||
.map(|errors| errors.contains(&cache_key))
|
||||
.unwrap_or(false);
|
||||
|
||||
if already_failed {
|
||||
|
Loading…
Reference in New Issue
Block a user