Add some conversion trait impls#145504
Conversation
|
rustbot has assigned @Mark-Simulacrum. Use |
This comment has been minimized.
This comment has been minimized.
7ef29d9 to
3a96604
Compare
This comment has been minimized.
This comment has been minimized.
676ff1f to
bd960c9
Compare
|
r? libs-api |
This comment has been minimized.
This comment has been minimized.
…r=<try> Add some conversion trait impls
library/core/src/ascii/ascii_char.rs
Outdated
| impl AsMut<str> for AsciiChar { | ||
| #[inline(always)] | ||
| fn as_mut(&mut self) -> &mut str { | ||
| let ascii_ptr: *mut [Self] = crate::slice::from_mut(self); | ||
| let str_ptr = ascii_ptr as *mut str; | ||
| // SAFETY: Each ASCII codepoint in UTF-8 is encoded as one single-byte | ||
| // code unit having the same value as the ASCII byte. | ||
| unsafe { &mut *str_ptr } | ||
| } | ||
| } |
There was a problem hiding this comment.
This could probably be implemented in a new as_mut_str method, similar to as_str
Also, could everything here use #[inline] without the always?
|
@craterbot check |
- `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>`
315ecee to
d0b3a0b
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
…ait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc rust-lang#88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
…ait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc rust-lang#88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
…ait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc rust-lang#88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
…ait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc rust-lang#88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
…ait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc rust-lang#96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc rust-lang#96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc rust-lang#88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
Rollup of 12 pull requests Successful merges: - #152388 (`rust-analyzer` subtree update) - #151613 (Align `ArrayWindows` trait impls with `Windows`) - #152134 (Set crt_static_allow_dylibs to true for Emscripten target) - #152166 (cleanup some more things in `proc_macro::bridge`) - #152236 (compiletest: `-Zunstable-options` for json targets) - #152287 (Fix an ICE in the vtable iteration for a trait reference in const eval when a supertrait not implemented) - #142957 (std: introduce path normalize methods at top of `std::path`) - #145504 (Add some conversion trait impls) - #152131 (Port rustc_no_implicit_bounds attribute to parser.) - #152315 (fix: rhs_span to rhs_span_new) - #152327 (Check stalled coroutine obligations eagerly) - #152377 (Rename the query system's `JobOwner` to `ActiveJobGuard`, and include `key_hash`)
Rollup of 12 pull requests Successful merges: - #152388 (`rust-analyzer` subtree update) - #151613 (Align `ArrayWindows` trait impls with `Windows`) - #152134 (Set crt_static_allow_dylibs to true for Emscripten target) - #152166 (cleanup some more things in `proc_macro::bridge`) - #152236 (compiletest: `-Zunstable-options` for json targets) - #152287 (Fix an ICE in the vtable iteration for a trait reference in const eval when a supertrait not implemented) - #142957 (std: introduce path normalize methods at top of `std::path`) - #145504 (Add some conversion trait impls) - #152131 (Port rustc_no_implicit_bounds attribute to parser.) - #152315 (fix: rhs_span to rhs_span_new) - #152327 (Check stalled coroutine obligations eagerly) - #152377 (Rename the query system's `JobOwner` to `ActiveJobGuard`, and include `key_hash`)
Rollup of 12 pull requests Successful merges: - #152388 (`rust-analyzer` subtree update) - #151613 (Align `ArrayWindows` trait impls with `Windows`) - #152134 (Set crt_static_allow_dylibs to true for Emscripten target) - #152166 (cleanup some more things in `proc_macro::bridge`) - #152236 (compiletest: `-Zunstable-options` for json targets) - #152287 (Fix an ICE in the vtable iteration for a trait reference in const eval when a supertrait not implemented) - #142957 (std: introduce path normalize methods at top of `std::path`) - #145504 (Add some conversion trait impls) - #152131 (Port rustc_no_implicit_bounds attribute to parser.) - #152315 (fix: rhs_span to rhs_span_new) - #152327 (Check stalled coroutine obligations eagerly) - #152377 (Rename the query system's `JobOwner` to `ActiveJobGuard`, and include `key_hash`)
Rollup merge of #145504 - Jules-Bertholet:more_conversion_trait_impls, r=tgross35 Add some conversion trait impls - `impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc #96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc #96097) - `impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc #96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>` (cc #96097) - `impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>` (cc #96097) - `impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N]` (cc #96097) - `impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>` (equivalent of `as_array_of_cells`, cc #88248) - `impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>` - `impl<T> AsRef<[Cell<T>]> for Cell<[T]>` (equivalent of `as_slice_of_cells`) @rustbot label T-libs-api needs-fcp -T-libs I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.
| } | ||
|
|
||
| #[stable(feature = "more_conversion_trait_impls", since = "CURRENT_RUSTC_VERSION")] | ||
| impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]> { |
There was a problem hiding this comment.
Is there a strong reason to not have impl<T, const N: usize> AsMut<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N] too?
And I have a few places where bridging APIs could benefit from impl<T, const N: usize> AsMut<MaybeUninit<[T; N]>> for [T; N] too, which today requires transmute().
There was a problem hiding this comment.
You could try adding it, but IIRC it would cause ambiguity errors in existing code.
impl<T, const N: usize> From<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>(cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> AsRef<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>(cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> AsRef<[MaybeUninit<T>]> for MaybeUninit<[T; N]>(cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> AsMut<[MaybeUninit<T>; N]> for MaybeUninit<[T; N]>(cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> AsMut<[MaybeUninit<T>]> for MaybeUninit<[T; N]>(cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> From<MaybeUninit<[T; N]>> for [MaybeUninit<T>; N](cc Tracking Issue for MaybeUninit methods for arrays #96097)impl<T, const N: usize> AsRef<[Cell<T>; N]> for Cell<[T; N]>(equivalent ofas_array_of_cells, cc Tracking Issue for Cell::as_array_of_cells #88248)impl<T, const N: usize> AsRef<[Cell<T>]> for Cell<[T; N]>impl<T> AsRef<[Cell<T>]> for Cell<[T]>(equivalent ofas_slice_of_cells)@rustbot label T-libs-api needs-fcp -T-libs
I’ve tried to only add impls that are unlikely to cause single-applicable-impl inference breakage.