Override ToOwned::clone_into for Path and OsStr
The only non-overridden one remaining is the CStr impl, which cannot be optimized as doing so would break CString's second invariant.
This commit is contained in:
parent
9f2abadca2
commit
295bcdb715
@ -677,7 +677,13 @@ fn borrow(&self) -> &OsStr { &self[..] }
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl ToOwned for OsStr {
|
||||
type Owned = OsString;
|
||||
fn to_owned(&self) -> OsString { self.to_os_string() }
|
||||
fn to_owned(&self) -> OsString {
|
||||
self.to_os_string()
|
||||
}
|
||||
fn clone_into(&self, target: &mut OsString) {
|
||||
target.clear();
|
||||
target.push(self);
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@ -863,4 +869,14 @@ fn boxed_default() {
|
||||
let boxed = <Box<OsStr>>::default();
|
||||
assert!(boxed.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_os_str_clone_into() {
|
||||
let mut os_string = OsString::with_capacity(123);
|
||||
os_string.push("hello");
|
||||
let os_str = OsStr::new("bonjour");
|
||||
os_str.clone_into(&mut os_string);
|
||||
assert_eq!(os_str, os_string);
|
||||
assert!(os_string.capacity() >= 123);
|
||||
}
|
||||
}
|
||||
|
@ -311,6 +311,7 @@
|
||||
#![feature(str_utf16)]
|
||||
#![feature(test, rustc_private)]
|
||||
#![feature(thread_local)]
|
||||
#![feature(toowned_clone_into)]
|
||||
#![feature(try_from)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(unicode)]
|
||||
|
@ -1322,6 +1322,9 @@ impl ToOwned for Path {
|
||||
fn to_owned(&self) -> PathBuf {
|
||||
self.to_path_buf()
|
||||
}
|
||||
fn clone_into(&self, target: &mut PathBuf) {
|
||||
self.inner.clone_into(&mut target.inner);
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@ -3722,4 +3725,13 @@ fn into_boxed() {
|
||||
assert_eq!(&*boxed, &*path_buf);
|
||||
assert_eq!(&*path_buf, path);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_clone_into() {
|
||||
let mut path_buf = PathBuf::from("supercalifragilisticexpialidocious");
|
||||
let path = Path::new("short");
|
||||
path.clone_into(&mut path_buf);
|
||||
assert_eq!(path, path_buf);
|
||||
assert!(path_buf.into_os_string().capacity() >= 15);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user