Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/test-utils/src/minicore.rs')
-rw-r--r--crates/test-utils/src/minicore.rs93
1 files changed, 89 insertions, 4 deletions
diff --git a/crates/test-utils/src/minicore.rs b/crates/test-utils/src/minicore.rs
index 696928b522..b7c09391ec 100644
--- a/crates/test-utils/src/minicore.rs
+++ b/crates/test-utils/src/minicore.rs
@@ -34,7 +34,8 @@
//! eq: sized
//! error: fmt
//! fmt: option, result, transmute, coerce_unsized, copy, clone, derive
-//! fmt_before_1_89_0: fmt
+//! fmt_before_1_93_0: fmt
+//! fmt_before_1_89_0: fmt_before_1_93_0
//! fn: sized, tuple
//! from: sized, result
//! future: pin
@@ -68,6 +69,7 @@
//! transmute:
//! try: infallible
//! tuple:
+//! unary_ops:
//! unpin: sized
//! unsize: sized
//! write: fmt
@@ -591,13 +593,13 @@ pub mod ops {
impl<T: PointeeSized> Deref for &T {
type Target = T;
fn deref(&self) -> &T {
- loop {}
+ *self
}
}
impl<T: PointeeSized> Deref for &mut T {
type Target = T;
fn deref(&self) -> &T {
- loop {}
+ *self
}
}
// region:deref_mut
@@ -1056,6 +1058,9 @@ pub mod ops {
type Output = $t;
fn add(self, other: $t) -> $t { self + other }
}
+ impl AddAssign for $t {
+ fn add_assign(&mut self, other: $t) { *self += other; }
+ }
)*)
}
@@ -1063,6 +1068,24 @@ pub mod ops {
// endregion:builtin_impls
// endregion:add
+ // region:unary_ops
+ #[lang = "not"]
+ pub const trait Not {
+ type Output;
+
+ #[must_use]
+ fn not(self) -> Self::Output;
+ }
+
+ #[lang = "neg"]
+ pub const trait Neg {
+ type Output;
+
+ #[must_use = "this returns the result of the operation, without modifying the original"]
+ fn neg(self) -> Self::Output;
+ }
+ // endregion:unary_ops
+
// region:coroutine
mod coroutine {
use crate::pin::Pin;
@@ -1118,6 +1141,12 @@ pub mod cmp {
pub trait Eq: PartialEq<Self> + PointeeSized {}
+ // region:builtin_impls
+ impl PartialEq for () {
+ fn eq(&self, other: &()) -> bool { true }
+ }
+ // endregion:builtin_impls
+
// region:derive
#[rustc_builtin_macro]
pub macro PartialEq($item:item) {}
@@ -1231,6 +1260,7 @@ pub mod fmt {
Unknown,
}
+ // region:fmt_before_1_93_0
#[lang = "format_count"]
pub enum Count {
Is(usize),
@@ -1260,6 +1290,7 @@ pub mod fmt {
Placeholder { position, fill, align, flags, precision, width }
}
}
+ // endregion:fmt_before_1_93_0
// region:fmt_before_1_89_0
#[lang = "format_unsafe_arg"]
@@ -1275,6 +1306,7 @@ pub mod fmt {
// endregion:fmt_before_1_89_0
}
+ // region:fmt_before_1_93_0
#[derive(Copy, Clone)]
#[lang = "format_arguments"]
pub struct Arguments<'a> {
@@ -1313,6 +1345,14 @@ pub mod fmt {
}
// endregion:!fmt_before_1_89_0
+ pub fn from_str_nonconst(s: &'static str) -> Arguments<'a> {
+ Self::from_str(s)
+ }
+
+ pub const fn from_str(s: &'static str) -> Arguments<'a> {
+ Arguments { pieces: &[s], fmt: None, args: &[] }
+ }
+
pub const fn as_str(&self) -> Option<&'static str> {
match (self.pieces, self.args) {
([], []) => Some(""),
@@ -1321,6 +1361,41 @@ pub mod fmt {
}
}
}
+ // endregion:fmt_before_1_93_0
+
+ // region:!fmt_before_1_93_0
+ #[lang = "format_arguments"]
+ #[derive(Copy, Clone)]
+ pub struct Arguments<'a> {
+ // This is a non-faithful representation of `core::fmt::Arguments`, because the real one
+ // is too complex for minicore.
+ message: Option<&'a str>,
+ }
+
+ impl<'a> Arguments<'a> {
+ pub unsafe fn new<const N: usize, const M: usize>(
+ _template: &'a [u8; N],
+ _args: &'a [rt::Argument<'a>; M],
+ ) -> Arguments<'a> {
+ Arguments { message: None }
+ }
+
+ pub fn from_str_nonconst(s: &'static str) -> Arguments<'a> {
+ Arguments { message: Some(s) }
+ }
+
+ pub const fn from_str(s: &'static str) -> Arguments<'a> {
+ Arguments { message: Some(s) }
+ }
+
+ pub fn as_str(&self) -> Option<&'static str> {
+ match self.message {
+ Some(s) => unsafe { Some(&*(s as *const str)) },
+ None => None,
+ }
+ }
+ }
+ // endregion:!fmt_before_1_93_0
// region:derive
pub(crate) mod derive {
@@ -1490,6 +1565,12 @@ pub mod pin {
{
}
// endregion:dispatch_from_dyn
+ // region:coerce_unsized
+ impl<Ptr, U> crate::ops::CoerceUnsized<Pin<U>> for Pin<Ptr> where
+ Ptr: crate::ops::CoerceUnsized<U>
+ {
+ }
+ // endregion:coerce_unsized
}
// endregion:pin
@@ -1783,7 +1864,7 @@ mod panicking {
#[lang = "panic"]
pub const fn panic(expr: &'static str) -> ! {
- panic_fmt(crate::fmt::Arguments::new_const(&[expr]))
+ panic_fmt(crate::fmt::Arguments::from_str(expr))
}
}
// endregion:panic
@@ -1954,6 +2035,10 @@ pub mod num {
// region:bool_impl
#[lang = "bool"]
impl bool {
+ pub fn then_some<T>(self, t: T) -> Option<T> {
+ if self { Some(t) } else { None }
+ }
+
pub fn then<T, F: FnOnce() -> T>(self, f: F) -> Option<T> {
if self { Some(f()) } else { None }
}