oxc_allocator/
allocator_api2.rs

1// All methods just delegate to `bumpalo`, so all marked `#[inline(always)]`.
2// All have same safety preconditions of `bumpalo` methods of the same name.
3#![expect(clippy::inline_always, clippy::undocumented_unsafe_blocks)]
4
5use std::{alloc::Layout, ptr::NonNull};
6
7use allocator_api2::alloc::{AllocError, Allocator};
8
9/// SAFETY:
10/// <https://github.com/fitzgen/bumpalo/blob/4eeab8847c85d5cde135ca21ae14a54e56b05224/src/lib.rs#L1938>
11unsafe impl Allocator for &crate::Allocator {
12    #[inline(always)]
13    fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
14        self.bump().allocate(layout)
15    }
16
17    #[inline(always)]
18    unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
19        unsafe {
20            self.bump().deallocate(ptr, layout);
21        }
22    }
23
24    #[inline(always)]
25    unsafe fn shrink(
26        &self,
27        ptr: NonNull<u8>,
28        old_layout: Layout,
29        new_layout: Layout,
30    ) -> Result<NonNull<[u8]>, AllocError> {
31        unsafe { self.bump().shrink(ptr, old_layout, new_layout) }
32    }
33
34    #[inline(always)]
35    unsafe fn grow(
36        &self,
37        ptr: NonNull<u8>,
38        old_layout: Layout,
39        new_layout: Layout,
40    ) -> Result<NonNull<[u8]>, AllocError> {
41        unsafe { self.bump().grow(ptr, old_layout, new_layout) }
42    }
43
44    #[inline(always)]
45    unsafe fn grow_zeroed(
46        &self,
47        ptr: NonNull<u8>,
48        old_layout: Layout,
49        new_layout: Layout,
50    ) -> Result<NonNull<[u8]>, AllocError> {
51        unsafe { self.bump().grow_zeroed(ptr, old_layout, new_layout) }
52    }
53}