diff options
| author | Michael Woerister <michaelwoerister@posteo.net> | 2016-09-13 15:02:17 -0400 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo.net> | 2016-09-13 15:22:51 -0400 |
| commit | 869d14447af84bfb506e19abf2ca97810845c675 (patch) | |
| tree | 4340e8100a6c1fc9b67726797e5b23c249484af4 | |
| parent | 75a0dd0fca4e3e3b5eade66fb3dddc2b9868dc52 (diff) | |
| download | rust-869d14447af84bfb506e19abf2ca97810845c675.tar.gz rust-869d14447af84bfb506e19abf2ca97810845c675.zip | |
TypeIdHasher: Let projections be hashed implicitly by the visitor.
| -rw-r--r-- | src/librustc/ty/util.rs | 11 | ||||
| -rw-r--r-- | src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs | 5 | ||||
| -rw-r--r-- | src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs | 5 | ||||
| -rw-r--r-- | src/test/run-pass/typeid-intrinsic.rs | 9 |
4 files changed, 19 insertions, 11 deletions
diff --git a/src/librustc/ty/util.rs b/src/librustc/ty/util.rs index a8287ecc046..344f0e57d64 100644 --- a/src/librustc/ty/util.rs +++ b/src/librustc/ty/util.rs @@ -453,17 +453,6 @@ impl<'a, 'gcx, 'tcx> TypeVisitor<'tcx> for TypeIdHasher<'a, 'gcx, 'tcx> { // Hash region and builtin bounds. data.region_bound.visit_with(self); self.hash(data.builtin_bounds); - - // Only projection bounds are left, hash them. - self.hash(data.projection_bounds.len()); - for bound in &data.projection_bounds { - self.def_id(bound.0.trait_ref.def_id); - self.hash(bound.0.item_name); - bound.visit_with(self); - } - - // Bypass super_visit_with, we've visited everything. - return false; } TyTuple(tys) => { self.hash(tys.len()); diff --git a/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs b/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs index 42c0da6286b..10e315f269f 100644 --- a/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs +++ b/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs @@ -22,6 +22,8 @@ pub type F = Option<isize>; pub type G = usize; pub type H = &'static str; pub type I = Box<Fn()>; +pub type I32Iterator = Iterator<Item=i32>; +pub type U32Iterator = Iterator<Item=u32>; pub fn id_A() -> TypeId { TypeId::of::<A>() } pub fn id_B() -> TypeId { TypeId::of::<B>() } @@ -34,3 +36,6 @@ pub fn id_H() -> TypeId { TypeId::of::<H>() } pub fn id_I() -> TypeId { TypeId::of::<I>() } pub fn foo<T: Any>() -> TypeId { TypeId::of::<T>() } + +pub fn id_i32_iterator() -> TypeId { TypeId::of::<I32Iterator>() } +pub fn id_u32_iterator() -> TypeId { TypeId::of::<U32Iterator>() } diff --git a/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs b/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs index 42c0da6286b..10e315f269f 100644 --- a/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs +++ b/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs @@ -22,6 +22,8 @@ pub type F = Option<isize>; pub type G = usize; pub type H = &'static str; pub type I = Box<Fn()>; +pub type I32Iterator = Iterator<Item=i32>; +pub type U32Iterator = Iterator<Item=u32>; pub fn id_A() -> TypeId { TypeId::of::<A>() } pub fn id_B() -> TypeId { TypeId::of::<B>() } @@ -34,3 +36,6 @@ pub fn id_H() -> TypeId { TypeId::of::<H>() } pub fn id_I() -> TypeId { TypeId::of::<I>() } pub fn foo<T: Any>() -> TypeId { TypeId::of::<T>() } + +pub fn id_i32_iterator() -> TypeId { TypeId::of::<I32Iterator>() } +pub fn id_u32_iterator() -> TypeId { TypeId::of::<U32Iterator>() } diff --git a/src/test/run-pass/typeid-intrinsic.rs b/src/test/run-pass/typeid-intrinsic.rs index e99a5f69af4..36650368d57 100644 --- a/src/test/run-pass/typeid-intrinsic.rs +++ b/src/test/run-pass/typeid-intrinsic.rs @@ -78,4 +78,13 @@ pub fn main() { b.hash(&mut s2); assert_eq!(s1.finish(), s2.finish()); + + // Check projections + + assert_eq!(TypeId::of::<other1::I32Iterator>(), other1::id_i32_iterator()); + assert_eq!(TypeId::of::<other1::U32Iterator>(), other1::id_u32_iterator()); + assert_eq!(other1::id_i32_iterator(), other2::id_i32_iterator()); + assert_eq!(other1::id_u32_iterator(), other2::id_u32_iterator()); + assert!(other1::id_i32_iterator() != other1::id_u32_iterator()); + assert!(TypeId::of::<other1::I32Iterator>() != TypeId::of::<other1::U32Iterator>()); } |
