mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-28 18:43:01 +00:00
Adjust minicore for Sized Hierarchy changes
This commit is contained in:
parent
01339d4deb
commit
d3e6dcd3ca
3 changed files with 75 additions and 52 deletions
|
|
@ -77,33 +77,52 @@
|
|||
|
||||
pub mod marker {
|
||||
// region:sized
|
||||
#[lang = "pointee_sized"]
|
||||
#[fundamental]
|
||||
#[rustc_specialization_trait]
|
||||
#[rustc_deny_explicit_impl]
|
||||
#[rustc_do_not_implement_via_object]
|
||||
#[rustc_coinductive]
|
||||
pub trait PointeeSized {}
|
||||
|
||||
#[lang = "meta_sized"]
|
||||
#[fundamental]
|
||||
#[rustc_specialization_trait]
|
||||
#[rustc_deny_explicit_impl]
|
||||
#[rustc_do_not_implement_via_object]
|
||||
#[rustc_coinductive]
|
||||
pub trait MetaSized: PointeeSized {}
|
||||
|
||||
#[lang = "sized"]
|
||||
#[fundamental]
|
||||
#[rustc_specialization_trait]
|
||||
pub trait Sized {}
|
||||
#[rustc_deny_explicit_impl]
|
||||
#[rustc_do_not_implement_via_object]
|
||||
#[rustc_coinductive]
|
||||
pub trait Sized: MetaSized {}
|
||||
// endregion:sized
|
||||
|
||||
// region:send
|
||||
pub unsafe auto trait Send {}
|
||||
|
||||
impl<T: ?Sized> !Send for *const T {}
|
||||
impl<T: ?Sized> !Send for *mut T {}
|
||||
impl<T: PointeeSized> !Send for *const T {}
|
||||
impl<T: PointeeSized> !Send for *mut T {}
|
||||
// region:sync
|
||||
unsafe impl<T: Sync + ?Sized> Send for &T {}
|
||||
unsafe impl<T: Send + ?Sized> Send for &mut T {}
|
||||
unsafe impl<T: Sync + PointeeSized> Send for &T {}
|
||||
unsafe impl<T: Send + PointeeSized> Send for &mut T {}
|
||||
// endregion:sync
|
||||
// endregion:send
|
||||
|
||||
// region:sync
|
||||
pub unsafe auto trait Sync {}
|
||||
|
||||
impl<T: ?Sized> !Sync for *const T {}
|
||||
impl<T: ?Sized> !Sync for *mut T {}
|
||||
impl<T: PointeeSized> !Sync for *const T {}
|
||||
impl<T: PointeeSized> !Sync for *mut T {}
|
||||
// endregion:sync
|
||||
|
||||
// region:unsize
|
||||
#[lang = "unsize"]
|
||||
pub trait Unsize<T: ?Sized> {}
|
||||
pub trait Unsize<T: PointeeSized>: PointeeSized {}
|
||||
// endregion:unsize
|
||||
|
||||
// region:unpin
|
||||
|
|
@ -137,9 +156,9 @@ pub mod marker {
|
|||
bool char
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Copy for *const T {}
|
||||
impl<T: ?Sized> Copy for *mut T {}
|
||||
impl<T: ?Sized> Copy for &T {}
|
||||
impl<T: PointeeSized> Copy for *const T {}
|
||||
impl<T: PointeeSized> Copy for *mut T {}
|
||||
impl<T: PointeeSized> Copy for &T {}
|
||||
impl Copy for ! {}
|
||||
}
|
||||
// endregion:copy
|
||||
|
|
@ -151,7 +170,7 @@ pub mod marker {
|
|||
|
||||
// region:phantom_data
|
||||
#[lang = "phantom_data"]
|
||||
pub struct PhantomData<T: ?Sized>;
|
||||
pub struct PhantomData<T: PointeeSized>;
|
||||
// endregion:phantom_data
|
||||
|
||||
// region:discriminant
|
||||
|
|
@ -208,7 +227,7 @@ pub mod default {
|
|||
pub mod hash {
|
||||
pub trait Hasher {}
|
||||
|
||||
pub trait Hash {
|
||||
pub trait Hash: PointeeSized {
|
||||
fn hash<H: Hasher>(&self, state: &mut H);
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +243,7 @@ pub mod cell {
|
|||
use crate::mem;
|
||||
|
||||
#[lang = "unsafe_cell"]
|
||||
pub struct UnsafeCell<T: ?Sized> {
|
||||
pub struct UnsafeCell<T: PointeeSized> {
|
||||
value: T,
|
||||
}
|
||||
|
||||
|
|
@ -238,7 +257,7 @@ pub mod cell {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct Cell<T: ?Sized> {
|
||||
pub struct Cell<T: PointeeSized> {
|
||||
value: UnsafeCell<T>,
|
||||
}
|
||||
|
||||
|
|
@ -357,7 +376,7 @@ pub mod convert {
|
|||
// endregion:from
|
||||
|
||||
// region:as_ref
|
||||
pub trait AsRef<T: ?Sized> {
|
||||
pub trait AsRef<T: PointeeSized>: PointeeSized {
|
||||
fn as_ref(&self) -> &T;
|
||||
}
|
||||
// endregion:as_ref
|
||||
|
|
@ -370,7 +389,7 @@ pub mod mem {
|
|||
// region:manually_drop
|
||||
#[lang = "manually_drop"]
|
||||
#[repr(transparent)]
|
||||
pub struct ManuallyDrop<T: ?Sized> {
|
||||
pub struct ManuallyDrop<T: PointeeSized> {
|
||||
value: T,
|
||||
}
|
||||
|
||||
|
|
@ -381,7 +400,7 @@ pub mod mem {
|
|||
}
|
||||
|
||||
// region:deref
|
||||
impl<T: ?Sized> crate::ops::Deref for ManuallyDrop<T> {
|
||||
impl<T: PointeeSized> crate::ops::Deref for ManuallyDrop<T> {
|
||||
type Target = T;
|
||||
fn deref(&self) -> &T {
|
||||
&self.value
|
||||
|
|
@ -428,7 +447,7 @@ pub mod mem {
|
|||
pub mod ptr {
|
||||
// region:drop
|
||||
#[lang = "drop_in_place"]
|
||||
pub unsafe fn drop_in_place<T: ?Sized>(to_drop: *mut T) {
|
||||
pub unsafe fn drop_in_place<T: PointeeSized>(to_drop: *mut T) {
|
||||
unsafe { drop_in_place(to_drop) }
|
||||
}
|
||||
pub const unsafe fn read<T>(src: *const T) -> T {
|
||||
|
|
@ -444,7 +463,7 @@ pub mod ptr {
|
|||
// region:pointee
|
||||
#[lang = "pointee_trait"]
|
||||
#[rustc_deny_explicit_impl(implement_via_object = false)]
|
||||
pub trait Pointee {
|
||||
pub trait Pointee: PointeeSized {
|
||||
#[lang = "metadata_type"]
|
||||
type Metadata: Copy + Send + Sync + Ord + Hash + Unpin;
|
||||
}
|
||||
|
|
@ -452,11 +471,11 @@ pub mod ptr {
|
|||
// region:non_null
|
||||
#[rustc_layout_scalar_valid_range_start(1)]
|
||||
#[rustc_nonnull_optimization_guaranteed]
|
||||
pub struct NonNull<T: ?Sized> {
|
||||
pub struct NonNull<T: PointeeSized> {
|
||||
pointer: *const T,
|
||||
}
|
||||
// region:coerce_unsized
|
||||
impl<T: ?Sized, U: ?Sized> crate::ops::CoerceUnsized<NonNull<U>> for NonNull<T> where
|
||||
impl<T: PointeeSized, U: PointeeSized> crate::ops::CoerceUnsized<NonNull<U>> for NonNull<T> where
|
||||
T: crate::marker::Unsize<U>
|
||||
{
|
||||
}
|
||||
|
|
@ -481,19 +500,19 @@ pub mod ops {
|
|||
use crate::marker::Unsize;
|
||||
|
||||
#[lang = "coerce_unsized"]
|
||||
pub trait CoerceUnsized<T: ?Sized> {}
|
||||
pub trait CoerceUnsized<T> {}
|
||||
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a mut U> for &'a mut T {}
|
||||
impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b mut T {}
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for &'a mut T {}
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for &'a mut T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<&'a mut U> for &'a mut T {}
|
||||
impl<'a, 'b: 'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<&'a U> for &'b mut T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*mut U> for &'a mut T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*const U> for &'a mut T {}
|
||||
|
||||
impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for &'a T {}
|
||||
impl<'a, 'b: 'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<&'a U> for &'b T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*const U> for &'a T {}
|
||||
|
||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
|
||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *mut T {}
|
||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *const T {}
|
||||
impl<T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*mut U> for *mut T {}
|
||||
impl<T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*const U> for *mut T {}
|
||||
impl<T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<*const U> for *const T {}
|
||||
}
|
||||
pub use self::unsize::CoerceUnsized;
|
||||
// endregion:coerce_unsized
|
||||
|
|
@ -501,19 +520,19 @@ pub mod ops {
|
|||
// region:deref
|
||||
mod deref {
|
||||
#[lang = "deref"]
|
||||
pub trait Deref {
|
||||
pub trait Deref: PointeeSized {
|
||||
#[lang = "deref_target"]
|
||||
type Target: ?Sized;
|
||||
fn deref(&self) -> &Self::Target;
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Deref for &T {
|
||||
impl<T: PointeeSized> Deref for &T {
|
||||
type Target = T;
|
||||
fn deref(&self) -> &T {
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
impl<T: ?Sized> Deref for &mut T {
|
||||
impl<T: PointeeSized> Deref for &mut T {
|
||||
type Target = T;
|
||||
fn deref(&self) -> &T {
|
||||
loop {}
|
||||
|
|
@ -521,19 +540,19 @@ pub mod ops {
|
|||
}
|
||||
// region:deref_mut
|
||||
#[lang = "deref_mut"]
|
||||
pub trait DerefMut: Deref {
|
||||
pub trait DerefMut: Deref + PointeeSized {
|
||||
fn deref_mut(&mut self) -> &mut Self::Target;
|
||||
}
|
||||
// endregion:deref_mut
|
||||
|
||||
// region:receiver
|
||||
#[lang = "receiver"]
|
||||
pub trait Receiver {
|
||||
pub trait Receiver: PointeeSized {
|
||||
#[lang = "receiver_target"]
|
||||
type Target: ?Sized;
|
||||
}
|
||||
|
||||
impl<P: ?Sized, T: ?Sized> Receiver for P
|
||||
impl<P: PointeeSized, T: PointeeSized> Receiver for P
|
||||
where
|
||||
P: Deref<Target = T>,
|
||||
{
|
||||
|
|
@ -1011,13 +1030,13 @@ pub mod ops {
|
|||
#[lang = "dispatch_from_dyn"]
|
||||
pub trait DispatchFromDyn<T> {}
|
||||
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<&'a U> for &'a T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> DispatchFromDyn<&'a U> for &'a T {}
|
||||
|
||||
impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<&'a mut U> for &'a mut T {}
|
||||
impl<'a, T: PointeeSized + Unsize<U>, U: PointeeSized> DispatchFromDyn<&'a mut U> for &'a mut T {}
|
||||
|
||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*const U> for *const T {}
|
||||
impl<T: PointeeSized + Unsize<U>, U: PointeeSized> DispatchFromDyn<*const U> for *const T {}
|
||||
|
||||
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*mut U> for *mut T {}
|
||||
impl<T: PointeeSized + Unsize<U>, U: PointeeSized> DispatchFromDyn<*mut U> for *mut T {}
|
||||
}
|
||||
pub use self::dispatch_from_dyn::DispatchFromDyn;
|
||||
// endregion:dispatch_from_dyn
|
||||
|
|
@ -1026,14 +1045,14 @@ pub mod ops {
|
|||
// region:eq
|
||||
pub mod cmp {
|
||||
#[lang = "eq"]
|
||||
pub trait PartialEq<Rhs: ?Sized = Self> {
|
||||
pub trait PartialEq<Rhs: PointeeSized = Self>: PointeeSized {
|
||||
fn eq(&self, other: &Rhs) -> bool;
|
||||
fn ne(&self, other: &Rhs) -> bool {
|
||||
!self.eq(other)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Eq: PartialEq<Self> {}
|
||||
pub trait Eq: PartialEq<Self> + PointeeSized {}
|
||||
|
||||
// region:derive
|
||||
#[rustc_builtin_macro]
|
||||
|
|
@ -1044,11 +1063,11 @@ pub mod cmp {
|
|||
|
||||
// region:ord
|
||||
#[lang = "partial_ord"]
|
||||
pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
|
||||
pub trait PartialOrd<Rhs: PointeeSized = Self>: PartialEq<Rhs> + PointeeSized {
|
||||
fn partial_cmp(&self, other: &Rhs) -> Option<Ordering>;
|
||||
}
|
||||
|
||||
pub trait Ord: Eq + PartialOrd<Self> {
|
||||
pub trait Ord: Eq + PartialOrd<Self> + PointeeSized {
|
||||
fn cmp(&self, other: &Self) -> Ordering;
|
||||
}
|
||||
|
||||
|
|
@ -1106,10 +1125,10 @@ pub mod fmt {
|
|||
}
|
||||
}
|
||||
|
||||
pub trait Debug {
|
||||
pub trait Debug: PointeeSized {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result;
|
||||
}
|
||||
pub trait Display {
|
||||
pub trait Display: PointeeSized {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result;
|
||||
}
|
||||
|
||||
|
|
@ -1268,7 +1287,7 @@ pub mod fmt {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Debug + ?Sized> Debug for &T {
|
||||
impl<T: Debug + PointeeSized> Debug for &T {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
|
||||
(&**self).fmt(f)
|
||||
}
|
||||
|
|
@ -1543,7 +1562,7 @@ pub mod iter {
|
|||
}
|
||||
// endregion:iterators
|
||||
}
|
||||
impl<I: Iterator + ?Sized> Iterator for &mut I {
|
||||
impl<I: Iterator + PointeeSized> Iterator for &mut I {
|
||||
type Item = I::Item;
|
||||
fn next(&mut self) -> Option<I::Item> {
|
||||
(**self).next()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue