Print TypeId as a u128 for Debug · model-checking/verify-rust-std@affa2f9 (original) (raw)

Original file line number Diff line number Diff line change
@@ -602,7 +602,7 @@ impl dyn Any + Send + Sync {
602 602 /// While `TypeId` implements `Hash`, `PartialOrd`, and `Ord`, it is worth
603 603 /// noting that the hashes and ordering will vary between Rust releases. Beware
604 604 /// of relying on them inside of your code!
605 -#[derive(Clone, Copy, Debug, Eq, PartialOrd, Ord)]
605 +#[derive(Clone, Copy, Eq, PartialOrd, Ord)]
606 606 #[stable(feature = "rust1", since = "1.0.0")]
607 607 pub struct TypeId {
608 608 // We avoid using `u128` because that imposes higher alignment requirements on many platforms.
@@ -644,6 +644,10 @@ impl TypeId {
644 644 let t2 = t as u64;
645 645 TypeId { t: (t1, t2) }
646 646 }
647 +
648 +fn as_u128(self) -> u128 {
649 + u128::from(self.t.0) << 64 | u128::from(self.t.1)
650 +}
647 651 }
648 652
649 653 #[stable(feature = "rust1", since = "1.0.0")]
@@ -666,6 +670,13 @@ impl hash::Hash for TypeId {
666 670 }
667 671 }
668 672
673 +#[stable(feature = "rust1", since = "1.0.0")]
674 +impl fmt::Debug for TypeId {
675 +fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
676 + f.debug_tuple("TypeId").field(&self.as_u128()).finish()
677 +}
678 +}
679 +
669 680 /// Returns the name of a type as a string slice.
670 681 ///
671 682 /// # Note