#[cfg(feature = "shared-array-buffer")]
use crate::ecmascript::builtins::SharedArrayBuffer;
use crate::{
ecmascript::{
builtins::{
ArrayBuffer,
array_buffer::{ViewedArrayBufferByteLength, ViewedArrayBufferByteOffset},
},
types::OrdinaryObject,
},
engine::bindable_handle,
heap::{CompactionLists, HeapIndexHandle, HeapMarkAndSweep, WorkQueues},
};
#[derive(Debug)]
pub(crate) struct DataViewRecord<'a> {
pub(crate) object_index: Option<OrdinaryObject<'a>>,
pub(crate) viewed_array_buffer: ArrayBuffer<'a>,
pub(crate) byte_length: ViewedArrayBufferByteLength,
pub(crate) byte_offset: ViewedArrayBufferByteOffset,
}
bindable_handle!(DataViewRecord);
impl Default for DataViewRecord<'_> {
fn default() -> Self {
Self {
object_index: None,
viewed_array_buffer: ArrayBuffer::_DEF,
byte_length: ViewedArrayBufferByteLength::default(),
byte_offset: ViewedArrayBufferByteOffset::default(),
}
}
}
#[cfg(feature = "shared-array-buffer")]
#[derive(Debug)]
pub(crate) struct SharedDataViewRecord<'a> {
pub(crate) object_index: Option<OrdinaryObject<'a>>,
pub(crate) viewed_array_buffer: SharedArrayBuffer<'a>,
pub(crate) byte_length: ViewedArrayBufferByteLength,
pub(crate) byte_offset: ViewedArrayBufferByteOffset,
}
#[cfg(feature = "shared-array-buffer")]
bindable_handle!(SharedDataViewRecord);
#[cfg(feature = "shared-array-buffer")]
impl Default for SharedDataViewRecord<'_> {
fn default() -> Self {
Self {
object_index: None,
viewed_array_buffer: SharedArrayBuffer::_DEF,
byte_length: ViewedArrayBufferByteLength::default(),
byte_offset: ViewedArrayBufferByteOffset::default(),
}
}
}
impl HeapMarkAndSweep for DataViewRecord<'static> {
fn mark_values(&self, queues: &mut WorkQueues) {
let Self {
object_index,
viewed_array_buffer,
byte_length: _,
byte_offset: _,
} = self;
object_index.mark_values(queues);
viewed_array_buffer.mark_values(queues);
}
fn sweep_values(&mut self, compactions: &CompactionLists) {
let Self {
object_index,
viewed_array_buffer,
byte_length: _,
byte_offset: _,
} = self;
object_index.sweep_values(compactions);
viewed_array_buffer.sweep_values(compactions);
}
}
#[cfg(feature = "shared-array-buffer")]
impl HeapMarkAndSweep for SharedDataViewRecord<'static> {
fn mark_values(&self, queues: &mut WorkQueues) {
let Self {
object_index,
viewed_array_buffer,
byte_length: _,
byte_offset: _,
} = self;
object_index.mark_values(queues);
viewed_array_buffer.mark_values(queues);
}
fn sweep_values(&mut self, compactions: &CompactionLists) {
let Self {
object_index,
viewed_array_buffer,
byte_length: _,
byte_offset: _,
} = self;
object_index.sweep_values(compactions);
viewed_array_buffer.sweep_values(compactions);
}
}