use crate::{
engine::bindable_handle,
heap::{CompactionLists, HeapMarkAndSweep, WorkQueues},
};
mod module;
mod script;
mod source_code;
pub use module::*;
pub use script::*;
pub(crate) use source_code::*;
#[derive(Clone, Copy)]
pub(crate) enum ScriptOrModule<'a> {
Script(Script<'a>),
SourceTextModule(SourceTextModule<'a>),
}
impl core::fmt::Debug for ScriptOrModule<'_> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
ScriptOrModule::Script(script) => script.fmt(f),
ScriptOrModule::SourceTextModule(module) => module.fmt(f),
}
}
}
bindable_handle!(ScriptOrModule);
impl HeapMarkAndSweep for ScriptOrModule<'static> {
fn mark_values(&self, queues: &mut WorkQueues) {
match self {
ScriptOrModule::Script(s) => s.mark_values(queues),
ScriptOrModule::SourceTextModule(m) => m.mark_values(queues),
}
}
fn sweep_values(&mut self, compactions: &CompactionLists) {
match self {
ScriptOrModule::Script(s) => s.sweep_values(compactions),
ScriptOrModule::SourceTextModule(m) => m.sweep_values(compactions),
}
}
}