Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -233,12 +233,14 @@ impl<'a> PromiseGroup<'a> {
}
}

#[doc(hidden)]
impl AsRef<[PromiseGroupRecord<'static>]> for Agent {
fn as_ref(&self) -> &[PromiseGroupRecord<'static>] {
&self.heap.promise_group_records
}
}

#[doc(hidden)]
impl AsMut<[PromiseGroupRecord<'static>]> for Agent {
fn as_mut(&mut self) -> &mut [PromiseGroupRecord<'static>] {
&mut self.heap.promise_group_records
Expand Down
4 changes: 4 additions & 0 deletions nova_vm/src/ecmascript/builtins/ordinary/shape.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1093,13 +1093,15 @@ impl<'a> DirectArenaAccessMut for ObjectShape<'a> {
}
}

#[doc(hidden)]
impl AsRef<Vec<ObjectShapeRecord<'static>>> for Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<ObjectShapeRecord<'static>> {
&self.heap.object_shapes
}
}

#[doc(hidden)]
impl AsMut<Vec<ObjectShapeRecord<'static>>> for Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<ObjectShapeRecord<'static>> {
Expand Down Expand Up @@ -1283,12 +1285,14 @@ impl HeapMarkAndSweep for PrototypeShapeTable {
}
}

#[doc(hidden)]
impl AsRef<[ObjectShapeTransitionMap<'static>]> for Agent {
fn as_ref(&self) -> &[ObjectShapeTransitionMap<'static>] {
&self.heap.object_shape_transitions
}
}

#[doc(hidden)]
impl AsMut<[ObjectShapeTransitionMap<'static>]> for Agent {
fn as_mut(&mut self) -> &mut [ObjectShapeTransitionMap<'static>] {
&mut self.heap.object_shape_transitions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2297,12 +2297,14 @@ impl<'a, T: Viewable> DirectArenaAccessMut for GenericTypedArray<'a, T> {
}
}
}
#[doc(hidden)]
impl AsRef<Vec<TypedArrayRecord<'static>>> for Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<TypedArrayRecord<'static>> {
&self.heap.typed_arrays
}
}
#[doc(hidden)]
impl AsMut<Vec<TypedArrayRecord<'static>>> for Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<TypedArrayRecord<'static>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2321,13 +2321,15 @@ impl<'a, T: Viewable> DirectArenaAccessMut for GenericSharedTypedArray<'a, T> {
}
}
}
impl AsRef<Vec<SharedTypedArrayRecord<'static>>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsRef<Vec<SharedTypedArrayRecord<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<SharedTypedArrayRecord<'static>> {
&self.heap.shared_typed_arrays
}
}
impl AsMut<Vec<SharedTypedArrayRecord<'static>>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsMut<Vec<SharedTypedArrayRecord<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<SharedTypedArrayRecord<'static>> {
&mut self.heap.shared_typed_arrays
Expand Down
8 changes: 6 additions & 2 deletions nova_vm/src/ecmascript/execution/environments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,16 @@ macro_rules! create_environment_index {
}
}

impl AsRef<Vec<$record>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsRef<Vec<$record>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<$record> {
&self.heap.environments.$entry
}
}

impl AsMut<Vec<$record>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsMut<Vec<$record>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<$record> {
&mut self.heap.environments.$entry
Expand Down Expand Up @@ -1155,12 +1157,14 @@ impl AsMut<Environments> for Environments {
}
}

#[doc(hidden)]
impl AsRef<Environments> for Agent {
fn as_ref(&self) -> &Environments {
&self.heap.environments
}
}

#[doc(hidden)]
impl AsMut<Environments> for Agent {
fn as_mut(&mut self) -> &mut Environments {
&mut self.heap.environments
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,14 @@ impl<'a> ModuleRequestRecord<'a> {
}
}

#[doc(hidden)]
impl AsRef<[ModuleRequestRecord<'static>]> for Agent {
fn as_ref(&self) -> &[ModuleRequestRecord<'static>] {
&self.heap.module_request_records
}
}

#[doc(hidden)]
impl AsMut<[ModuleRequestRecord<'static>]> for Agent {
fn as_mut(&mut self) -> &mut [ModuleRequestRecord<'static>] {
&mut self.heap.module_request_records
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2247,12 +2247,14 @@ impl AsMut<SourceTextModuleHeap> for SourceTextModuleHeap {
}
}

#[doc(hidden)]
impl AsRef<SourceTextModuleHeap> for Agent {
fn as_ref(&self) -> &SourceTextModuleHeap {
&self.heap.source_text_module_records
}
}

#[doc(hidden)]
impl AsMut<SourceTextModuleHeap> for Agent {
fn as_mut(&mut self) -> &mut SourceTextModuleHeap {
&mut self.heap.source_text_module_records
Expand Down
20 changes: 16 additions & 4 deletions nova_vm/src/heap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,7 @@ fn init_heap() {

macro_rules! arena_vec_access {
(soa: $name: ident, $lt: lifetime, $data: ident, $member: ident, $output_ref: ident, $output_mut: ident) => {
#[doc(hidden)]
impl<$lt> crate::heap::DirectArenaAccessSoA for $name<$lt> {
type Data = $data<'static>;

Expand All @@ -734,6 +735,7 @@ macro_rules! arena_vec_access {
}
}

#[doc(hidden)]
impl<$lt> crate::heap::DirectArenaAccessSoAMut for $name<$lt> {
#[inline]
fn get_direct_mut<'agent>(
Expand All @@ -760,21 +762,24 @@ macro_rules! arena_vec_access {
}
}

impl AsRef<soavec::SoAVec<$data<'static>>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsRef<soavec::SoAVec<$data<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_ref(&self) -> &soavec::SoAVec<$data<'static>> {
&self.heap.$member
}
}

impl AsMut<soavec::SoAVec<$data<'static>>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsMut<soavec::SoAVec<$data<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut soavec::SoAVec<$data<'static>> {
&mut self.heap.$member
}
}
};
($name: ident, $lt: lifetime, $data: ident, $member: ident) => {
#[doc(hidden)]
impl<$lt> crate::heap::DirectArenaAccess for $name<$lt> {
type Data = $data<'static>;
type Output = $data<$lt>;
Expand All @@ -787,6 +792,7 @@ macro_rules! arena_vec_access {
}
}

#[doc(hidden)]
impl<$lt> crate::heap::DirectArenaAccessMut for $name<$lt> {
#[inline]
fn get_direct_mut(self, source: &mut Vec<Self::Data>) -> &mut Self::Output {
Expand All @@ -801,13 +807,15 @@ macro_rules! arena_vec_access {
}
}

#[doc(hidden)]
impl AsRef<Vec<$data<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<$data<'static>> {
&self.heap.$member
}
}

#[doc(hidden)]
impl AsMut<Vec<$data<'static>>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<$data<'static>> {
Expand All @@ -816,6 +824,7 @@ macro_rules! arena_vec_access {
}
};
($name: ident, $data: ty, $member: ident, $output: ty) => {
#[doc(hidden)]
impl crate::heap::DirectArenaAccess for $name<'_> {
type Data = $data;
type Output = $output;
Expand All @@ -828,6 +837,7 @@ macro_rules! arena_vec_access {
}
}

#[doc(hidden)]
impl crate::heap::DirectArenaAccessMut for $name<'_> {
#[inline]
fn get_direct_mut(self, source: &mut Vec<Self::Data>) -> &mut Self::Output {
Expand All @@ -837,14 +847,16 @@ macro_rules! arena_vec_access {
}
}

impl AsRef<Vec<$data>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsRef<Vec<$data>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_ref(&self) -> &Vec<$data> {
&self.heap.$member
}
}

impl AsMut<Vec<$data>> for crate::ecmascript::execution::Agent {
#[doc(hidden)]
impl AsMut<Vec<$data>> for crate::ecmascript::Agent {
#[inline(always)]
fn as_mut(&mut self) -> &mut Vec<$data> {
&mut self.heap.$member
Expand Down
2 changes: 2 additions & 0 deletions nova_vm/src/heap/element_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3681,12 +3681,14 @@ impl HeapMarkAndSweep for ElementDescriptor<'static> {
}
}

#[doc(hidden)]
impl AsRef<ElementArrays> for Agent {
fn as_ref(&self) -> &ElementArrays {
&self.heap.elements
}
}

#[doc(hidden)]
impl AsMut<ElementArrays> for Agent {
fn as_mut(&mut self) -> &mut ElementArrays {
&mut self.heap.elements
Expand Down
Loading