feat: 事件目标弱引用注册表加三方法加原型链

This commit is contained in:
2026-10-10 09:06:08 +00:00
parent 8a8c3e9b9c
commit 6ecd3aed89
20 changed files with 890 additions and 123 deletions
+10 -1
View File
@@ -42,11 +42,12 @@ pub(crate) enum RootGroup {
Global,
WorkerObjects,
DisposeStack,
EventTargets,
}
impl RootGroup {
/// 根组总数(与变体数同源,绑定逐组计数数组的长度)。
pub const COUNT: usize = 27;
pub const COUNT: usize = 28;
}
impl Vm {
@@ -180,6 +181,14 @@ impl Vm {
for &worker_obj in self.worker_objects.values() {
f(RootGroup::WorkerObjects, worker_obj);
}
// EventTarget 监听器注册表:监听器回调是 GC 根(存活目标的回调随目标存活,
// 漏根 → 回调被 sweep 释放 → 派发解引用悬垂)。弱键剪枝见 sweep;此处
// 无条件标活全部回调(死目标的回调多活一轮收集,非泄漏,sweep 已剪其条目)。
for state in self.realm.gc.borrow().event_targets.values() {
for entry in &state.listeners {
f(RootGroup::EventTargets, entry.callback);
}
}
}
/// GC 根统一枚举入口:遍历的字段清单与 `for_each_value` 相同。