Replace unnecessary uses of TraitObject with casts
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user