Hide allocator details from TryReserveError
This commit is contained in:
parent
bddb59cf07
commit
a294aa8d3d
13 changed files with 269 additions and 109 deletions
|
|
@ -10,6 +10,7 @@ use hashbrown::hash_map as base;
|
|||
use crate::borrow::Borrow;
|
||||
use crate::cell::Cell;
|
||||
use crate::collections::TryReserveError;
|
||||
use crate::collections::TryReserveErrorKind;
|
||||
use crate::fmt::{self, Debug};
|
||||
#[allow(deprecated)]
|
||||
use crate::hash::{BuildHasher, Hash, Hasher, SipHasher13};
|
||||
|
|
@ -2966,9 +2967,11 @@ fn map_entry<'a, K: 'a, V: 'a>(raw: base::RustcEntry<'a, K, V>) -> Entry<'a, K,
|
|||
#[inline]
|
||||
pub(super) fn map_try_reserve_error(err: hashbrown::TryReserveError) -> TryReserveError {
|
||||
match err {
|
||||
hashbrown::TryReserveError::CapacityOverflow => TryReserveError::CapacityOverflow,
|
||||
hashbrown::TryReserveError::CapacityOverflow => {
|
||||
TryReserveErrorKind::CapacityOverflow.into()
|
||||
}
|
||||
hashbrown::TryReserveError::AllocError { layout } => {
|
||||
TryReserveError::AllocError { layout, non_exhaustive: () }
|
||||
TryReserveErrorKind::AllocError { layout, non_exhaustive: () }.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use super::HashMap;
|
|||
use super::RandomState;
|
||||
use crate::cell::RefCell;
|
||||
use rand::{thread_rng, Rng};
|
||||
use realstd::collections::TryReserveError::*;
|
||||
use realstd::collections::TryReserveErrorKind::*;
|
||||
|
||||
// https://github.com/rust-lang/rust/issues/62301
|
||||
fn _assert_hashmap_is_unwind_safe() {
|
||||
|
|
@ -821,12 +821,12 @@ fn test_try_reserve() {
|
|||
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_USIZE) {
|
||||
if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()) {
|
||||
} else {
|
||||
panic!("usize::MAX should trigger an overflow!");
|
||||
}
|
||||
|
||||
if let Err(AllocError { .. }) = empty_bytes.try_reserve(MAX_USIZE / 8) {
|
||||
if let Err(AllocError { .. }) = empty_bytes.try_reserve(MAX_USIZE / 8).map_err(|e| e.kind()) {
|
||||
} else {
|
||||
panic!("usize::MAX / 8 should trigger an OOM!")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -422,6 +422,12 @@ pub use self::hash_set::HashSet;
|
|||
|
||||
#[unstable(feature = "try_reserve", reason = "new API", issue = "48043")]
|
||||
pub use alloc_crate::collections::TryReserveError;
|
||||
#[unstable(
|
||||
feature = "try_reserve_kind",
|
||||
reason = "Uncertain how much info should be exposed",
|
||||
issue = "48043"
|
||||
)]
|
||||
pub use alloc_crate::collections::TryReserveErrorKind;
|
||||
|
||||
mod hash;
|
||||
|
||||
|
|
|
|||
|
|
@ -325,6 +325,7 @@
|
|||
#![feature(trace_macros)]
|
||||
#![feature(try_blocks)]
|
||||
#![feature(try_reserve)]
|
||||
#![feature(try_reserve_kind)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(unsafe_cell_raw_get)]
|
||||
#![feature(unwind_attributes)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue