implement Error trait for error structs added in allocator API.
This commit is contained in:
parent
57ab9e7e7c
commit
12d4d12fef
|
@ -16,6 +16,7 @@
|
|||
issue = "27700")]
|
||||
|
||||
use core::cmp;
|
||||
use core::fmt;
|
||||
use core::mem;
|
||||
use core::usize;
|
||||
use core::ptr::{self, Unique};
|
||||
|
@ -335,6 +336,19 @@ impl AllocErr {
|
|||
pub fn is_request_unsupported(&self) -> bool {
|
||||
if let AllocErr::Unsupported { .. } = *self { true } else { false }
|
||||
}
|
||||
pub fn description(&self) -> &str {
|
||||
match *self {
|
||||
AllocErr::Exhausted { .. } => "allocator memory exhausted",
|
||||
AllocErr::Unsupported { .. } => "unsupported allocator request",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// (we need this for downstream impl of trait Error)
|
||||
impl fmt::Display for AllocErr {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", self.description())
|
||||
}
|
||||
}
|
||||
|
||||
/// The `CannotReallocInPlace` error is used when `grow_in_place` or
|
||||
|
@ -343,6 +357,20 @@ impl AllocErr {
|
|||
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||
pub struct CannotReallocInPlace;
|
||||
|
||||
impl CannotReallocInPlace {
|
||||
pub fn description(&self) -> &str {
|
||||
"cannot reallocate allocator's memory in place"
|
||||
}
|
||||
}
|
||||
|
||||
// (we need this for downstream impl of trait Error)
|
||||
impl fmt::Display for CannotReallocInPlace {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", self.description())
|
||||
}
|
||||
}
|
||||
|
||||
/// An implementation of `Allocator` can allocate, reallocate, and
|
||||
/// An implementation of `Alloc` can allocate, reallocate, and
|
||||
/// deallocate arbitrary blocks of data described via `Layout`.
|
||||
///
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
// coherence challenge (e.g., specialization, neg impls, etc) we can
|
||||
// reconsider what crate these items belong in.
|
||||
|
||||
use alloc::allocator;
|
||||
use any::TypeId;
|
||||
use cell;
|
||||
use char;
|
||||
|
@ -221,6 +222,24 @@ impl Error for ! {
|
|||
fn description(&self) -> &str { *self }
|
||||
}
|
||||
|
||||
#[unstable(feature = "allocator_api",
|
||||
reason = "the precise API and guarantees it provides may be tweaked.",
|
||||
issue = "27700")]
|
||||
impl Error for allocator::AllocErr {
|
||||
fn description(&self) -> &str {
|
||||
allocator::AllocErr::description(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "allocator_api",
|
||||
reason = "the precise API and guarantees it provides may be tweaked.",
|
||||
issue = "27700")]
|
||||
impl Error for allocator::CannotReallocInPlace {
|
||||
fn description(&self) -> &str {
|
||||
allocator::CannotReallocInPlace::description(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl Error for str::ParseBoolError {
|
||||
fn description(&self) -> &str { "failed to parse bool" }
|
||||
|
|
|
@ -245,6 +245,7 @@
|
|||
// std is implemented with unstable features, many of which are internal
|
||||
// compiler details that will never be stable
|
||||
#![feature(alloc)]
|
||||
#![feature(allocator_api)]
|
||||
#![feature(allow_internal_unstable)]
|
||||
#![feature(asm)]
|
||||
#![feature(associated_consts)]
|
||||
|
|
Loading…
Reference in New Issue