@@ -1721,7 +1721,21 @@ impl<T> Weak<T> {
17211721 pub fn new() -> Weak<T> {
17221722 Weak { ptr: NonNull::new(usize::MAX as *mut RcBox<T>).expect("MAX is not 0") }
17231723 }
1724+ }
1725+
1726+ pub(crate) fn is_dangling<T: ?Sized>(ptr: NonNull<T>) -> bool {
1727+ let address = ptr.as_ptr() as *mut () as usize;
1728+ address == usize::MAX
1729+ }
1730+
1731+ /// Helper type to allow accessing the reference counts without
1732+ /// making any assertions about the data field.
1733+ struct WeakInner<'a> {
1734+ weak: &'a Cell<usize>,
1735+ strong: &'a Cell<usize>,
1736+ }
17241737
1738+ impl<T: ?Sized> Weak<T> {
17251739 /// Returns a raw pointer to the object `T` pointed to by this `Weak<T>`.
17261740 ///
17271741 /// The pointer is valid only if there are some strong references. The pointer may be dangling,
@@ -1854,21 +1868,7 @@ impl<T> Weak<T> {
18541868 // SAFETY: we now have recovered the original Weak pointer, so can create the Weak.
18551869 Weak { ptr: unsafe { NonNull::new_unchecked(ptr) } }
18561870 }
1857- }
1858-
1859- pub ( crate ) fn is_dangling < T : ?Sized > ( ptr : NonNull < T > ) -> bool {
1860- let address = ptr. as_ptr ( ) as * mut ( ) as usize ;
1861- address == usize:: MAX
1862- }
1863-
1864- /// Helper type to allow accessing the reference counts without
1865- /// making any assertions about the data field.
1866- struct WeakInner < ' a > {
1867- weak : & ' a Cell < usize > ,
1868- strong : & ' a Cell < usize > ,
1869- }
18701871
1871- impl < T : ?Sized > Weak < T > {
18721872 /// Attempts to upgrade the `Weak` pointer to an [`Rc`], delaying
18731873 /// dropping of the inner value if successful.
18741874 ///
0 commit comments