mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 04:08:41 +00:00
feat(allocator): introduce Address (#4810)
Closes #4807. Introduce `Address`. `Address` can be obtained from a `Box<T>` and can act as a unique identifier for an AST node in arena. NB: It will also be unique across 2 ASTs in different allocators as long as neither allocator is dropped.
This commit is contained in:
parent
3d40528588
commit
8e10e25ded
2 changed files with 16 additions and 1 deletions
|
|
@ -212,6 +212,21 @@ impl<'alloc, T: Hash> Hash for Vec<'alloc, T> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Memory address of an AST node in arena.
|
||||
///
|
||||
/// `Address` is generated from a `Box<T>`.
|
||||
/// AST nodes in a `Box` in an arena are guaranteed to never move in memory,
|
||||
/// so this address acts as a unique identifier for the duration of the arena's existence.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct Address(usize);
|
||||
|
||||
impl<'a, T> Box<'a, T> {
|
||||
#[inline]
|
||||
pub fn address(&self) -> Address {
|
||||
Address(ptr::addr_of!(**self) as usize)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::hash::{DefaultHasher, Hash, Hasher};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ mod convert;
|
|||
|
||||
use bumpalo::Bump;
|
||||
|
||||
pub use arena::{Box, String, Vec};
|
||||
pub use arena::{Address, Box, String, Vec};
|
||||
pub use clone_in::CloneIn;
|
||||
pub use convert::{FromIn, IntoIn};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue