diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 1c2c02b21e61f1d2f53218ba9128d30227aed5a4..737548ee868691cb402fd52bb38e7328756dec9e 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -4537,18 +4537,9 @@ pub fn each_bound_trait_and_supertraits(tcx: ctxt, // list. #[cfg(not(stage0))] pub fn each_bound_trait_and_supertraits(tcx: ctxt, - bounds: param_bounds, - f: &fn(&TraitRef) -> bool) -> bool { - for bounds.each |bound| { - let bound_trait_ref = match *bound { - ty::bound_trait(bound_t) => bound_t, - - ty::bound_copy | ty::bound_owned | - ty::bound_const | ty::bound_durable => { - loop; // skip non-trait bounds - } - }; - + bounds: &ParamBounds, + f: &fn(@TraitRef) -> bool) -> bool { + for bounds.trait_bounds.each |&bound_trait_ref| { let mut supertrait_set = HashMap::new(); let mut trait_refs = ~[]; let mut i = 0; diff --git a/src/librustc/util/enum_set.rs b/src/librustc/util/enum_set.rs index 859e743b43bfa983fd1faf384cb73269d8771492..c589ab52874218a178db905d11a916ca36f65cc5 100644 --- a/src/librustc/util/enum_set.rs +++ b/src/librustc/util/enum_set.rs @@ -49,6 +49,7 @@ fn contains_elem(&self, e: E) -> bool { (self.bits & bit(e)) != 0 } + #[cfg(stage0)] fn each(&self, f: &fn(E) -> bool) { let mut bits = self.bits; let mut index = 0; @@ -63,6 +64,22 @@ fn each(&self, f: &fn(E) -> bool) { bits >>= 1; } } + #[cfg(not(stage0))] + fn each(&self, f: &fn(E) -> bool) -> bool { + let mut bits = self.bits; + let mut index = 0; + while bits != 0 { + if (bits & 1) != 0 { + let e = CLike::from_uint(index); + if !f(e) { + return false; + } + } + index += 1; + bits >>= 1; + } + return true; + } } impl core::Sub, EnumSet> for EnumSet {