diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-03-13 03:33:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-13 03:33:41 +0100 |
| commit | 68abd9a99976a84cca6dcb5459cc3bc279470b4c (patch) | |
| tree | 7439d44a0d4713408af0226368405f54a661b57c /src/liballoc | |
| parent | fc19f0e75b57e0306a7ca9c132e27bfac0bb3e44 (diff) | |
| parent | df4ea90b39c808e858e05f3b4bb05fc29f812d26 (diff) | |
| download | rust-68abd9a99976a84cca6dcb5459cc3bc279470b4c.tar.gz rust-68abd9a99976a84cca6dcb5459cc3bc279470b4c.zip | |
Rollup merge of #59056 - scottmcm:even-fewer-lifetimes, r=sfackler
Use lifetime contravariance to elide more lifetimes in core+alloc+std
Sample:
```diff
- impl<'a, 'b, A: ?Sized, B: ?Sized> PartialEq<&'b mut B> for &'a mut A where A: PartialEq<B> {
+ impl<A: ?Sized, B: ?Sized> PartialEq<&mut B> for &mut A where A: PartialEq<B> {
#[inline]
- fn eq(&self, other: &&'b mut B) -> bool { PartialEq::eq(*self, *other) }
+ fn eq(&self, other: &&mut B) -> bool { PartialEq::eq(*self, *other) }
#[inline]
- fn ne(&self, other: &&'b mut B) -> bool { PartialEq::ne(*self, *other) }
+ fn ne(&self, other: &&mut B) -> bool { PartialEq::ne(*self, *other) }
}
```
[I didn't know this worked](https://internals.rust-lang.org/t/why-can-you-use-different-unconstrained-lifetimes-to-implement-traits/9544/2?u=scottmcm) until recently, but since defining methods contravariantly in their lifetimes this way has worked back to Rust 1.0, we might as well take advantage of combining it with IHLE.
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/boxed.rs | 8 | ||||
| -rw-r--r-- | src/liballoc/rc.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/string.rs | 4 | ||||
| -rw-r--r-- | src/liballoc/vec.rs | 16 |
4 files changed, 16 insertions, 16 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 74325a69e15..9bce142b483 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -489,7 +489,7 @@ impl<T: ?Sized> From<Box<T>> for Pin<Box<T>> { } #[stable(feature = "box_from_slice", since = "1.17.0")] -impl<'a, T: Copy> From<&'a [T]> for Box<[T]> { +impl<T: Copy> From<&[T]> for Box<[T]> { /// Converts a `&[T]` into a `Box<[T]>` /// /// This conversion allocates on the heap @@ -503,7 +503,7 @@ impl<'a, T: Copy> From<&'a [T]> for Box<[T]> { /// /// println!("{:?}", boxed_slice); /// ``` - fn from(slice: &'a [T]) -> Box<[T]> { + fn from(slice: &[T]) -> Box<[T]> { let mut boxed = unsafe { RawVec::with_capacity(slice.len()).into_box() }; boxed.copy_from_slice(slice); boxed @@ -511,7 +511,7 @@ impl<'a, T: Copy> From<&'a [T]> for Box<[T]> { } #[stable(feature = "box_from_slice", since = "1.17.0")] -impl<'a> From<&'a str> for Box<str> { +impl From<&str> for Box<str> { /// Converts a `&str` into a `Box<str>` /// /// This conversion allocates on the heap @@ -523,7 +523,7 @@ impl<'a> From<&'a str> for Box<str> { /// println!("{}", boxed); /// ``` #[inline] - fn from(s: &'a str) -> Box<str> { + fn from(s: &str) -> Box<str> { unsafe { from_boxed_utf8_unchecked(Box::from(s.as_bytes())) } } } diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs index 12f75d84211..68eecd97ea1 100644 --- a/src/liballoc/rc.rs +++ b/src/liballoc/rc.rs @@ -1145,7 +1145,7 @@ impl<T> From<T> for Rc<T> { } #[stable(feature = "shared_from_slice", since = "1.21.0")] -impl<'a, T: Clone> From<&'a [T]> for Rc<[T]> { +impl<T: Clone> From<&[T]> for Rc<[T]> { #[inline] fn from(v: &[T]) -> Rc<[T]> { <Self as RcFromSlice<T>>::from_slice(v) @@ -1153,7 +1153,7 @@ impl<'a, T: Clone> From<&'a [T]> for Rc<[T]> { } #[stable(feature = "shared_from_slice", since = "1.21.0")] -impl<'a> From<&'a str> for Rc<str> { +impl From<&str> for Rc<str> { #[inline] fn from(v: &str) -> Rc<str> { let rc = Rc::<[u8]>::from(v.as_bytes()); diff --git a/src/liballoc/string.rs b/src/liballoc/string.rs index b714df5d36b..a3e2098695f 100644 --- a/src/liballoc/string.rs +++ b/src/liballoc/string.rs @@ -2172,9 +2172,9 @@ impl AsRef<[u8]> for String { } #[stable(feature = "rust1", since = "1.0.0")] -impl<'a> From<&'a str> for String { +impl From<&str> for String { #[inline] - fn from(s: &'a str) -> String { + fn from(s: &str) -> String { s.to_owned() } } diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs index adcd3d84f48..cd62c3e0524 100644 --- a/src/liballoc/vec.rs +++ b/src/liballoc/vec.rs @@ -2182,25 +2182,25 @@ impl<T> AsMut<[T]> for Vec<T> { } #[stable(feature = "rust1", since = "1.0.0")] -impl<'a, T: Clone> From<&'a [T]> for Vec<T> { +impl<T: Clone> From<&[T]> for Vec<T> { #[cfg(not(test))] - fn from(s: &'a [T]) -> Vec<T> { + fn from(s: &[T]) -> Vec<T> { s.to_vec() } #[cfg(test)] - fn from(s: &'a [T]) -> Vec<T> { + fn from(s: &[T]) -> Vec<T> { crate::slice::to_vec(s) } } #[stable(feature = "vec_from_mut", since = "1.19.0")] -impl<'a, T: Clone> From<&'a mut [T]> for Vec<T> { +impl<T: Clone> From<&mut [T]> for Vec<T> { #[cfg(not(test))] - fn from(s: &'a mut [T]) -> Vec<T> { + fn from(s: &mut [T]) -> Vec<T> { s.to_vec() } #[cfg(test)] - fn from(s: &'a mut [T]) -> Vec<T> { + fn from(s: &mut [T]) -> Vec<T> { crate::slice::to_vec(s) } } @@ -2231,8 +2231,8 @@ impl<T> From<Vec<T>> for Box<[T]> { } #[stable(feature = "rust1", since = "1.0.0")] -impl<'a> From<&'a str> for Vec<u8> { - fn from(s: &'a str) -> Vec<u8> { +impl From<&str> for Vec<u8> { + fn from(s: &str) -> Vec<u8> { From::from(s.as_bytes()) } } |
