// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. mod raw_arena; mod shared_arena; mod shared_atomic_arena; mod unique_arena; use std::alloc::handle_alloc_error; use std::alloc::Layout; use std::ptr::NonNull; pub use raw_arena::*; pub use shared_arena::*; pub use shared_atomic_arena::*; pub use unique_arena::*; const unsafe fn ptr_byte_add( ptr: NonNull, offset: usize, ) -> NonNull { NonNull::new_unchecked((ptr.as_ptr() as *mut u8).add(offset) as _) } const unsafe fn ptr_byte_sub( ptr: NonNull, offset: usize, ) -> NonNull { NonNull::new_unchecked((ptr.as_ptr() as *mut u8).sub(offset) as _) } #[inline(always)] fn alloc_layout(layout: Layout) -> NonNull { // Layout of size zero is UB assert!(std::mem::size_of::() > 0); let alloc = unsafe { std::alloc::alloc(layout) } as *mut _; let Some(alloc) = NonNull::new(alloc) else { handle_alloc_error(layout); }; alloc } #[inline(always)] fn alloc() -> NonNull { // Layout of size zero is UB assert!(std::mem::size_of::() > 0); let alloc = unsafe { std::alloc::alloc(Layout::new::()) } as *mut _; let Some(alloc) = NonNull::new(alloc) else { handle_alloc_error(Layout::new::()); }; alloc }