aux: add {Meta,Pointee}Sized bounds to minicore
With `MetaSized` bounds replacing `?Sized` and being added as a supertrait, the same relaxations applied to the standard library must be applied to minicore.
This commit is contained in:
parent
86ab2b60cd
commit
c162328d30
2 changed files with 40 additions and 40 deletions
|
|
@ -50,8 +50,8 @@ pub trait Sized: MetaSized {}
|
|||
|
||||
#[lang = "legacy_receiver"]
|
||||
pub trait LegacyReceiver {}
|
||||
impl<T: ?Sized> LegacyReceiver for &T {}
|
||||
impl<T: ?Sized> LegacyReceiver for &mut T {}
|
||||
impl<T: PointeeSized> LegacyReceiver for &T {}
|
||||
impl<T: PointeeSized> LegacyReceiver for &mut T {}
|
||||
|
||||
#[lang = "copy"]
|
||||
pub trait Copy: Sized {}
|
||||
|
|
@ -73,14 +73,14 @@ impl_marker_trait!(
|
|||
f16, f32, f64, f128,
|
||||
]
|
||||
);
|
||||
impl<'a, T: ?Sized> Copy for &'a T {}
|
||||
impl<T: ?Sized> Copy for *const T {}
|
||||
impl<T: ?Sized> Copy for *mut T {}
|
||||
impl<'a, T: PointeeSized> Copy for &'a T {}
|
||||
impl<T: PointeeSized> Copy for *const T {}
|
||||
impl<T: PointeeSized> Copy for *mut T {}
|
||||
impl<T: Copy, const N: usize> Copy for [T; N] {}
|
||||
|
||||
#[lang = "phantom_data"]
|
||||
pub struct PhantomData<T: ?Sized>;
|
||||
impl<T: ?Sized> Copy for PhantomData<T> {}
|
||||
pub struct PhantomData<T: PointeeSized>;
|
||||
impl<T: PointeeSized> Copy for PhantomData<T> {}
|
||||
|
||||
pub enum Option<T> {
|
||||
None,
|
||||
|
|
@ -96,17 +96,17 @@ impl<T: Copy, E: Copy> Copy for Result<T, E> {}
|
|||
|
||||
#[lang = "manually_drop"]
|
||||
#[repr(transparent)]
|
||||
pub struct ManuallyDrop<T: ?Sized> {
|
||||
pub struct ManuallyDrop<T: PointeeSized> {
|
||||
value: T,
|
||||
}
|
||||
impl<T: Copy + ?Sized> Copy for ManuallyDrop<T> {}
|
||||
impl<T: Copy + PointeeSized> Copy for ManuallyDrop<T> {}
|
||||
|
||||
#[lang = "unsafe_cell"]
|
||||
#[repr(transparent)]
|
||||
pub struct UnsafeCell<T: ?Sized> {
|
||||
pub struct UnsafeCell<T: PointeeSized> {
|
||||
value: T,
|
||||
}
|
||||
impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
|
||||
impl<T: PointeeSized> !Freeze for UnsafeCell<T> {}
|
||||
|
||||
#[lang = "tuple_trait"]
|
||||
pub trait Tuple {}
|
||||
|
|
@ -182,15 +182,15 @@ pub trait Fn<Args: Tuple>: FnMut<Args> {
|
|||
#[lang = "dispatch_from_dyn"]
|
||||
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 {}
|
||||
|
||||
#[lang = "unsize"]
|
||||
trait Unsize<T: ?Sized> {}
|
||||
trait Unsize<T: PointeeSized>: PointeeSized {}
|
||||
|
||||
#[lang = "coerce_unsized"]
|
||||
pub trait CoerceUnsized<T: ?Sized> {}
|
||||
pub trait CoerceUnsized<T: PointeeSized> {}
|
||||
|
||||
impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
|
||||
impl<'a, 'b: 'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<&'a U> for &'b T {}
|
||||
|
||||
#[lang = "drop"]
|
||||
trait Drop {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
fundamental,
|
||||
marker_trait_attr,
|
||||
const_trait_impl,
|
||||
const_destruct
|
||||
const_destruct,
|
||||
)]
|
||||
#![allow(internal_features, incomplete_features)]
|
||||
#![no_std]
|
||||
|
|
@ -32,7 +32,7 @@ pub trait Copy {}
|
|||
|
||||
impl Copy for bool {}
|
||||
impl Copy for u8 {}
|
||||
impl<T: ?Sized> Copy for &T {}
|
||||
impl<T: PointeeSized> Copy for &T {}
|
||||
|
||||
#[lang = "add"]
|
||||
#[const_trait]
|
||||
|
|
@ -113,17 +113,17 @@ pub trait Tuple {}
|
|||
#[lang = "legacy_receiver"]
|
||||
pub trait LegacyReceiver {}
|
||||
|
||||
impl<T: ?Sized> LegacyReceiver for &T {}
|
||||
impl<T: PointeeSized> LegacyReceiver for &T {}
|
||||
|
||||
impl<T: ?Sized> LegacyReceiver for &mut T {}
|
||||
impl<T: PointeeSized> LegacyReceiver for &mut T {}
|
||||
|
||||
#[lang = "receiver"]
|
||||
pub trait Receiver {
|
||||
#[lang = "receiver_target"]
|
||||
type Target: ?Sized;
|
||||
type Target: MetaSized;
|
||||
}
|
||||
|
||||
impl<T: Deref + ?Sized> Receiver for T {
|
||||
impl<T: Deref + MetaSized> Receiver for T {
|
||||
type Target = <T as Deref>::Target;
|
||||
}
|
||||
|
||||
|
|
@ -169,15 +169,15 @@ fn panic_fmt() {}
|
|||
|
||||
#[lang = "index"]
|
||||
#[const_trait]
|
||||
pub trait Index<Idx: ?Sized> {
|
||||
type Output: ?Sized;
|
||||
pub trait Index<Idx: PointeeSized> {
|
||||
type Output: MetaSized;
|
||||
|
||||
fn index(&self, index: Idx) -> &Self::Output;
|
||||
}
|
||||
|
||||
#[const_trait]
|
||||
pub unsafe trait SliceIndex<T: ?Sized> {
|
||||
type Output: ?Sized;
|
||||
pub unsafe trait SliceIndex<T: PointeeSized> {
|
||||
type Output: MetaSized;
|
||||
fn index(self, slice: &T) -> &Self::Output;
|
||||
}
|
||||
|
||||
|
|
@ -206,23 +206,23 @@ where
|
|||
}
|
||||
|
||||
#[lang = "unsize"]
|
||||
pub trait Unsize<T: ?Sized> {}
|
||||
pub trait Unsize<T: PointeeSized>: PointeeSized {}
|
||||
|
||||
#[lang = "coerce_unsized"]
|
||||
pub trait CoerceUnsized<T: ?Sized> {}
|
||||
pub trait CoerceUnsized<T: PointeeSized> {}
|
||||
|
||||
impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
|
||||
impl<'a, 'b: 'a, T: PointeeSized + Unsize<U>, U: PointeeSized> CoerceUnsized<&'a U> for &'b T {}
|
||||
|
||||
#[lang = "deref"]
|
||||
#[const_trait]
|
||||
pub trait Deref {
|
||||
#[lang = "deref_target"]
|
||||
type Target: ?Sized;
|
||||
type Target: MetaSized;
|
||||
|
||||
fn deref(&self) -> &Self::Target;
|
||||
}
|
||||
|
||||
impl<T: ?Sized> const Deref for &T {
|
||||
impl<T: MetaSized> const Deref for &T {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
|
|
@ -230,7 +230,7 @@ impl<T: ?Sized> const Deref for &T {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: ?Sized> const Deref for &mut T {
|
||||
impl<T: MetaSized> const Deref for &mut T {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
|
|
@ -314,14 +314,14 @@ fn from_str(s: &str) -> Result<bool, ()> {
|
|||
|
||||
#[lang = "eq"]
|
||||
#[const_trait]
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: ?Sized, B: ?Sized> const PartialEq<&B> for &A
|
||||
impl<A: PointeeSized, B: PointeeSized> const PartialEq<&B> for &A
|
||||
where
|
||||
A: ~const PartialEq<B>,
|
||||
{
|
||||
|
|
@ -364,7 +364,7 @@ impl<P> Pin<P> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, T: ?Sized> Pin<&'a T> {
|
||||
impl<'a, T: PointeeSized> Pin<&'a T> {
|
||||
const fn get_ref(self) -> &'a T {
|
||||
self.pointer
|
||||
}
|
||||
|
|
@ -379,7 +379,7 @@ impl<P: Deref> Pin<P> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, T: ?Sized> Pin<&'a mut T> {
|
||||
impl<'a, T: PointeeSized> Pin<&'a mut T> {
|
||||
const unsafe fn get_unchecked_mut(self) -> &'a mut T {
|
||||
self.pointer
|
||||
}
|
||||
|
|
@ -425,7 +425,7 @@ impl<T: Clone> Clone for RefCell<T> {
|
|||
}
|
||||
}
|
||||
|
||||
struct RefCell<T: ?Sized> {
|
||||
struct RefCell<T: PointeeSized> {
|
||||
borrow: UnsafeCell<()>,
|
||||
value: UnsafeCell<T>,
|
||||
}
|
||||
|
|
@ -434,7 +434,7 @@ impl<T> RefCell<T> {
|
|||
loop {}
|
||||
}
|
||||
}
|
||||
impl<T: ?Sized> RefCell<T> {
|
||||
impl<T: PointeeSized> RefCell<T> {
|
||||
fn borrow(&self) -> Ref<'_, T> {
|
||||
loop {}
|
||||
}
|
||||
|
|
@ -442,16 +442,16 @@ impl<T: ?Sized> RefCell<T> {
|
|||
|
||||
#[lang = "unsafe_cell"]
|
||||
#[repr(transparent)]
|
||||
struct UnsafeCell<T: ?Sized> {
|
||||
struct UnsafeCell<T: PointeeSized> {
|
||||
value: T,
|
||||
}
|
||||
|
||||
struct Ref<'b, T: ?Sized + 'b> {
|
||||
struct Ref<'b, T: PointeeSized + 'b> {
|
||||
value: *const T,
|
||||
borrow: &'b UnsafeCell<()>,
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Deref for Ref<'_, T> {
|
||||
impl<T: MetaSized> Deref for Ref<'_, T> {
|
||||
type Target = T;
|
||||
|
||||
#[inline]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue