diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2016-08-27 09:31:15 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-27 09:31:15 +0530 |
| commit | 30835ec4e4f415e917b3e89edc8033789d1b009f (patch) | |
| tree | f708d72391df676805df764884027173b7c9942a /src/libstd/error.rs | |
| parent | 933d481bdd1ad64804173e09a257dc46535d333e (diff) | |
| parent | 2b10df7f24828b09759277cc3a9c18c493c38ce0 (diff) | |
| download | rust-30835ec4e4f415e917b3e89edc8033789d1b009f.tar.gz rust-30835ec4e4f415e917b3e89edc8033789d1b009f.zip | |
Rollup merge of #36005 - apasel422:traitobj, r=alexcrichton
Replace unnecessary uses of `TraitObject` with casts r? @alexcrichton
Diffstat (limited to 'src/libstd/error.rs')
| -rw-r--r-- | src/libstd/error.rs | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/src/libstd/error.rs b/src/libstd/error.rs index 44595361fb5..ab537f39bf9 100644 --- a/src/libstd/error.rs +++ b/src/libstd/error.rs @@ -54,7 +54,6 @@ use fmt::{self, Debug, Display}; use marker::Reflect; use mem::transmute; use num; -use raw::TraitObject; use str; use string; @@ -326,11 +325,7 @@ impl Error + 'static { pub fn downcast_ref<T: Error + 'static>(&self) -> Option<&T> { if self.is::<T>() { unsafe { - // Get the raw representation of the trait object - let to: TraitObject = transmute(self); - - // Extract the data pointer - Some(&*(to.data as *const T)) + Some(&*(self as *const Error as *const T)) } } else { None @@ -344,11 +339,7 @@ impl Error + 'static { pub fn downcast_mut<T: Error + 'static>(&mut self) -> Option<&mut T> { if self.is::<T>() { unsafe { - // Get the raw representation of the trait object - let to: TraitObject = transmute(self); - - // Extract the data pointer - Some(&mut *(to.data as *const T as *mut T)) + Some(&mut *(self as *mut Error as *mut T)) } } else { None @@ -409,13 +400,8 @@ impl Error { pub fn downcast<T: Error + 'static>(self: Box<Self>) -> Result<Box<T>, Box<Error>> { if self.is::<T>() { unsafe { - // Get the raw representation of the trait object - let raw = Box::into_raw(self); - let to: TraitObject = - transmute::<*mut Error, TraitObject>(raw); - - // Extract the data pointer - Ok(Box::from_raw(to.data as *mut T)) + let raw: *mut Error = Box::into_raw(self); + Ok(Box::from_raw(raw as *mut T)) } } else { Err(self) |
