diff --git a/src/arena.rs b/src/arena.rs index fb42ac17..75ac69f0 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -627,6 +627,12 @@ impl ArenaAllocated for IndexPtr { arena.base = Some(NonNull::new(raw_box).unwrap()); allocated_ptr } + + /// # Safety + /// - ptr points to an allocated slab of the correct kind + unsafe fn dealloc(ptr: NonNull>) { + drop(unsafe { Box::from_raw(ptr.as_ptr().cast::()) }); + } } #[repr(C)] @@ -768,11 +774,15 @@ unsafe fn drop_slab_in_place(value: NonNull) { ArenaHeaderTag::StandardErrorStream => { drop_typed_slab_in_place!(StandardErrorStream, value); } - ArenaHeaderTag::NullStream - | ArenaHeaderTag::IndexPtrUndefined + ArenaHeaderTag::IndexPtrUndefined | ArenaHeaderTag::IndexPtrDynamicUndefined | ArenaHeaderTag::IndexPtrDynamicIndex - | ArenaHeaderTag::IndexPtrIndex => {} + | ArenaHeaderTag::IndexPtrIndex => { + drop_typed_slab_in_place!(IndexPtr, value); + } + ArenaHeaderTag::NullStream => { + unreachable!("NullStream is never arena allocated!"); + } } }