about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEh2406 <YeomanYaacov@gmail.com>2018-06-27 18:15:57 -0400
committerEh2406 <YeomanYaacov@gmail.com>2018-06-28 10:18:32 -0400
commit4b44db126ef7701e76a6048c784764151d71d6c4 (patch)
tree5a860b4f54d97d343532f65fc9eb4bc2063406e8 /src
parent9bd2a63f29d4a64643aa6c25fe2e8390fa14b277 (diff)
downloadrust-4b44db126ef7701e76a6048c784764151d71d6c4.tar.gz
rust-4b44db126ef7701e76a6048c784764151d71d6c4.zip
each_affected_by_dirty
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/borrow_check/nll/constraint_set.rs30
-rw-r--r--src/librustc_mir/borrow_check/nll/region_infer/mod.rs6
2 files changed, 20 insertions, 16 deletions
diff --git a/src/librustc_mir/borrow_check/nll/constraint_set.rs b/src/librustc_mir/borrow_check/nll/constraint_set.rs
index c927aa871fc..154db25145e 100644
--- a/src/librustc_mir/borrow_check/nll/constraint_set.rs
+++ b/src/librustc_mir/borrow_check/nll/constraint_set.rs
@@ -8,10 +8,10 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use rustc_data_structures::indexed_vec::{Idx, IndexVec};
-use rustc_data_structures::fx::FxHashSet;
-use rustc::ty::RegionVid;
 use rustc::mir::Location;
+use rustc::ty::RegionVid;
+use rustc_data_structures::fx::FxHashSet;
+use rustc_data_structures::indexed_vec::{Idx, IndexVec};
 
 use std::fmt;
 use syntax_pos::Span;
@@ -23,15 +23,11 @@ crate struct ConstraintSet {
 }
 
 impl ConstraintSet {
-    pub fn new() -> Self {
-        Default::default()
-    }
-
     pub fn push(&mut self, constraint: OutlivesConstraint) {
-        debug!("add_outlives({:?}: {:?} @ {:?}",
-               constraint.sup,
-               constraint.sub,
-               constraint.point);
+        debug!(
+            "add_outlives({:?}: {:?} @ {:?}",
+            constraint.sup, constraint.sub, constraint.point
+        );
         if constraint.sup == constraint.sub {
             // 'a: 'a is pretty uninteresting
             return;
@@ -57,6 +53,17 @@ impl ConstraintSet {
 
         map
     }
+
+    pub fn each_affected_by_dirty(
+        &self,
+        mut opt_dep_idx: Option<ConstraintIndex>,
+        mut op: impl FnMut(ConstraintIndex),
+    ) {
+        while let Some(dep_idx) = opt_dep_idx {
+            op(dep_idx);
+            opt_dep_idx = self.constraints[dep_idx].next;
+        }
+    }
 }
 
 #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -105,4 +112,3 @@ impl fmt::Debug for OutlivesConstraint {
 }
 
 newtype_index!(ConstraintIndex { DEBUG_FORMAT = "ConstraintIndex({})" });
-
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs
index ef61b162e9c..488223e22e2 100644
--- a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs
+++ b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs
@@ -466,13 +466,11 @@ impl<'tcx> RegionInferenceContext<'tcx> {
                 debug!("propagate_constraints:   sub={:?}", constraint.sub);
                 debug!("propagate_constraints:   sup={:?}", constraint.sup);
 
-                let mut opt_dep_idx = dependency_map[constraint.sup];
-                while let Some(dep_idx) = opt_dep_idx {
+                self.constraints.each_affected_by_dirty(dependency_map[constraint.sup], |dep_idx| {
                     if clean_bit_vec.remove(dep_idx.index()) {
                         dirty_list.push(dep_idx);
                     }
-                    opt_dep_idx = self.constraints.inner()[dep_idx].next;
-                }
+                });
             }
 
             debug!("\n");