summary refs log tree commit diff
path: root/src/libstd/error.rs
diff options
context:
space:
mode:
authorAndrew Paseltiner <apaseltiner@gmail.com>2016-08-25 20:56:47 -0400
committerAndrew Paseltiner <apaseltiner@gmail.com>2016-08-26 06:37:36 -0400
commit2b10df7f24828b09759277cc3a9c18c493c38ce0 (patch)
tree8a10bb092c5adea8b94ecbf5c4c415adb008fecf /src/libstd/error.rs
parenteaf71f8d1034f16140791f566cab3f3c9a0bf96a (diff)
downloadrust-2b10df7f24828b09759277cc3a9c18c493c38ce0.tar.gz
rust-2b10df7f24828b09759277cc3a9c18c493c38ce0.zip
Replace unnecessary uses of `TraitObject` with casts
Diffstat (limited to 'src/libstd/error.rs')
-rw-r--r--src/libstd/error.rs22
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)