diff options
| author | bors <bors@rust-lang.org> | 2022-01-08 06:01:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-01-08 06:01:37 +0000 |
| commit | 84abaf3f7dc2b7c2b453deb18890d00d28ebd844 (patch) | |
| tree | c5b746f779fe6bd06d5859d8dcd95a7fddd60fa3 /library/core/src | |
| parent | e012a191d768adeda1ee36a99ef8b92d51920154 (diff) | |
| parent | 05cfc4f4a90bb87288d5a85df401af452f2269e0 (diff) | |
| download | rust-84abaf3f7dc2b7c2b453deb18890d00d28ebd844.tar.gz rust-84abaf3f7dc2b7c2b453deb18890d00d28ebd844.zip | |
Auto merge of #92664 - ehuss:rollup-t9yrvk5, r=ehuss
Rollup of 8 pull requests
Successful merges:
- #84640 (Implement `TryFrom<char>` for `u8`)
- #92336 (Remove &self from PrintState::to_string)
- #92375 (Consolidate checking for msvc when generating debuginfo)
- #92568 (Add note about non_exhaustive to variant_count)
- #92600 (Add some missing `#[must_use]` to some `f{32,64}` operations)
- #92610 (Create CSS class instead of using inline style for search results)
- #92632 (Implement stabilization of `#[feature(available_parallelism)]`)
- #92650 (Fix typo in `StableCrateId` docs)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'library/core/src')
| -rw-r--r-- | library/core/src/char/convert.rs | 15 | ||||
| -rw-r--r-- | library/core/src/char/mod.rs | 12 | ||||
| -rw-r--r-- | library/core/src/mem/mod.rs | 4 | ||||
| -rw-r--r-- | library/core/src/num/f32.rs | 5 | ||||
| -rw-r--r-- | library/core/src/num/f64.rs | 5 |
5 files changed, 41 insertions, 0 deletions
diff --git a/library/core/src/char/convert.rs b/library/core/src/char/convert.rs index c4046d7496f..1774ddd7cbb 100644 --- a/library/core/src/char/convert.rs +++ b/library/core/src/char/convert.rs @@ -1,5 +1,6 @@ //! Character conversions. +use crate::char::TryFromCharError; use crate::convert::TryFrom; use crate::fmt; use crate::mem::transmute; @@ -166,6 +167,20 @@ impl const From<char> for u128 { } } +/// Map `char` with code point in U+0000..=U+00FF to byte in 0x00..=0xFF with same value, failing +/// if the code point is greater than U+00FF. +/// +/// See [`impl From<u8> for char`](char#impl-From<u8>) for details on the encoding. +#[stable(feature = "u8_from_char", since = "1.59.0")] +impl TryFrom<char> for u8 { + type Error = TryFromCharError; + + #[inline] + fn try_from(c: char) -> Result<u8, Self::Error> { + u8::try_from(u32::from(c)).map_err(|_| TryFromCharError(())) + } +} + /// Maps a byte in 0x00..=0xFF to a `char` whose code point has the same value, in U+0000..=U+00FF. /// /// Unicode is designed such that this effectively decodes bytes diff --git a/library/core/src/char/mod.rs b/library/core/src/char/mod.rs index 5f30d5790a0..f65f84e93ae 100644 --- a/library/core/src/char/mod.rs +++ b/library/core/src/char/mod.rs @@ -544,3 +544,15 @@ impl fmt::Display for ToUppercase { fmt::Display::fmt(&self.0, f) } } + +/// The error type returned when a checked char conversion fails. +#[stable(feature = "u8_from_char", since = "1.59.0")] +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub struct TryFromCharError(pub(crate) ()); + +#[stable(feature = "u8_from_char", since = "1.59.0")] +impl fmt::Display for TryFromCharError { + fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { + "unicode code point out of range".fmt(fmt) + } +} diff --git a/library/core/src/mem/mod.rs b/library/core/src/mem/mod.rs index 7d005666a74..989ec0639cd 100644 --- a/library/core/src/mem/mod.rs +++ b/library/core/src/mem/mod.rs @@ -1045,6 +1045,10 @@ pub const fn discriminant<T>(v: &T) -> Discriminant<T> { /// return value is unspecified. Equally, if `T` is an enum with more variants than `usize::MAX` /// the return value is unspecified. Uninhabited variants will be counted. /// +/// Note that an enum may be expanded with additional variants in the future +/// as a non-breaking change, for example if it is marked `#[non_exhaustive]`, +/// which will change the result of this function. +/// /// # Examples /// /// ``` diff --git a/library/core/src/num/f32.rs b/library/core/src/num/f32.rs index c4a232ef36c..85ceede5b9e 100644 --- a/library/core/src/num/f32.rs +++ b/library/core/src/num/f32.rs @@ -628,6 +628,7 @@ impl f32 { /// /// assert!(abs_difference <= f32::EPSILON); /// ``` + #[must_use = "this returns the result of the operation, without modifying the original"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn recip(self) -> f32 { @@ -684,6 +685,7 @@ impl f32 { /// ``` /// /// If one of the arguments is NaN, then the other argument is returned. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn max(self, other: f32) -> f32 { @@ -703,6 +705,7 @@ impl f32 { /// ``` /// /// If one of the arguments is NaN, then the other argument is returned. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn min(self, other: f32) -> f32 { @@ -726,6 +729,7 @@ impl f32 { /// If one of the arguments is NaN, then NaN is returned. Otherwise this returns the greater /// of the two numbers. For this operation, -0.0 is considered to be less than +0.0. /// Note that this follows the semantics specified in IEEE 754-2019. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[unstable(feature = "float_minimum_maximum", issue = "91079")] #[inline] pub fn maximum(self, other: f32) -> f32 { @@ -757,6 +761,7 @@ impl f32 { /// If one of the arguments is NaN, then NaN is returned. Otherwise this returns the lesser /// of the two numbers. For this operation, -0.0 is considered to be less than +0.0. /// Note that this follows the semantics specified in IEEE 754-2019. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[unstable(feature = "float_minimum_maximum", issue = "91079")] #[inline] pub fn minimum(self, other: f32) -> f32 { diff --git a/library/core/src/num/f64.rs b/library/core/src/num/f64.rs index 85ee6aa2cb8..4049c95b130 100644 --- a/library/core/src/num/f64.rs +++ b/library/core/src/num/f64.rs @@ -643,6 +643,7 @@ impl f64 { /// /// assert!(abs_difference < 1e-10); /// ``` + #[must_use = "this returns the result of the operation, without modifying the original"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn recip(self) -> f64 { @@ -700,6 +701,7 @@ impl f64 { /// ``` /// /// If one of the arguments is NaN, then the other argument is returned. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn max(self, other: f64) -> f64 { @@ -719,6 +721,7 @@ impl f64 { /// ``` /// /// If one of the arguments is NaN, then the other argument is returned. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn min(self, other: f64) -> f64 { @@ -742,6 +745,7 @@ impl f64 { /// If one of the arguments is NaN, then NaN is returned. Otherwise this returns the greater /// of the two numbers. For this operation, -0.0 is considered to be less than +0.0. /// Note that this follows the semantics specified in IEEE 754-2019. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[unstable(feature = "float_minimum_maximum", issue = "91079")] #[inline] pub fn maximum(self, other: f64) -> f64 { @@ -773,6 +777,7 @@ impl f64 { /// If one of the arguments is NaN, then NaN is returned. Otherwise this returns the lesser /// of the two numbers. For this operation, -0.0 is considered to be less than +0.0. /// Note that this follows the semantics specified in IEEE 754-2019. + #[must_use = "this returns the result of the comparison, without modifying either input"] #[unstable(feature = "float_minimum_maximum", issue = "91079")] #[inline] pub fn minimum(self, other: f64) -> f64 { |
