use crate::{
ecmascript::types::Object,
engine::bindable_handle,
heap::{CompactionLists, HeapMarkAndSweep, WorkQueues},
};
#[derive(Debug, Clone)]
pub(crate) enum ProxyHeapData<'a> {
NonRevoked {
proxy_target: Object<'a>,
proxy_handler: Object<'a>,
},
_RevokedCallable,
_Revoked,
}
bindable_handle!(ProxyHeapData);
impl HeapMarkAndSweep for ProxyHeapData<'static> {
fn mark_values(&self, queues: &mut WorkQueues) {
let Self::NonRevoked {
proxy_target,
proxy_handler,
} = self
else {
return;
};
proxy_target.mark_values(queues);
proxy_handler.mark_values(queues);
}
fn sweep_values(&mut self, compactions: &CompactionLists) {
let Self::NonRevoked {
proxy_target,
proxy_handler,
} = self
else {
return;
};
proxy_target.sweep_values(compactions);
proxy_handler.sweep_values(compactions);
}
}