]> git.lizzy.rs Git - rust.git/commitdiff
Replace unnecessary uses of `TraitObject` with casts
authorAndrew Paseltiner <apaseltiner@gmail.com>
Fri, 26 Aug 2016 00:56:47 +0000 (20:56 -0400)
committerAndrew Paseltiner <apaseltiner@gmail.com>
Fri, 26 Aug 2016 10:37:36 +0000 (06:37 -0400)
src/liballoc/boxed.rs
src/liballoc/lib.rs
src/libcore/any.rs
src/libstd/error.rs

index dae12f6e8bdf7c48558c22880fc473e35d27be6a..c8a78f84f185768fde245c014c5d9bf29559833a 100644 (file)
@@ -67,7 +67,6 @@
 use core::ops::{CoerceUnsized, Deref, DerefMut};
 use core::ops::{BoxPlace, Boxed, InPlace, Place, Placer};
 use core::ptr::{self, Unique};
-use core::raw::TraitObject;
 use core::convert::From;
 
 /// A value that represents the heap. This is the default place that the `box`
@@ -428,12 +427,8 @@ impl Box<Any> {
     pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> {
         if self.is::<T>() {
             unsafe {
-                // Get the raw representation of the trait object
-                let raw = Box::into_raw(self);
-                let to: TraitObject = mem::transmute::<*mut Any, TraitObject>(raw);
-
-                // Extract the data pointer
-                Ok(Box::from_raw(to.data as *mut T))
+                let raw: *mut Any = Box::into_raw(self);
+                Ok(Box::from_raw(raw as *mut T))
             }
         } else {
             Err(self)
index d9fd2d92710dc5c75b873e4577a62c28b11c2755..c6453da3f4697d5f660634cf59a088a4197059ea 100644 (file)
@@ -91,7 +91,7 @@
 #![cfg_attr(stage0, feature(unsafe_no_drop_flag))]
 #![feature(unsize)]
 
-#![cfg_attr(not(test), feature(fused, raw, fn_traits, placement_new_protocol))]
+#![cfg_attr(not(test), feature(fused, fn_traits, placement_new_protocol))]
 #![cfg_attr(test, feature(test, box_heap))]
 
 // Allow testing this library
index 4f486ad7cb8b23cbf47b5e00c329656027df1393..a3018a46eea22063545331e6937609597a98654d 100644 (file)
@@ -72,8 +72,6 @@
 #![stable(feature = "rust1", since = "1.0.0")]
 
 use fmt;
-use mem::transmute;
-use raw::TraitObject;
 use intrinsics;
 use marker::Reflect;
 
@@ -199,11 +197,7 @@ pub fn is<T: Any>(&self) -> bool {
     pub fn downcast_ref<T: Any>(&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 Any as *const T))
             }
         } else {
             None
@@ -240,11 +234,7 @@ pub fn downcast_ref<T: Any>(&self) -> Option<&T> {
     pub fn downcast_mut<T: Any>(&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 Any as *mut T))
             }
         } else {
             None
index 44595361fb57c504cf7460f8f85e90e11534f6a8..ab537f39bf96a268a2c8161ca30e70cce9b0a9ec 100644 (file)
@@ -54,7 +54,6 @@
 use marker::Reflect;
 use mem::transmute;
 use num;
-use raw::TraitObject;
 use str;
 use string;
 
@@ -326,11 +325,7 @@ pub fn is<T: Error + 'static>(&self) -> bool {
     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 @@ pub fn downcast_ref<T: Error + 'static>(&self) -> Option<&T> {
     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)