mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 19:51:11 +08:00
feat: 事件目标弱引用注册表加三方法加原型链
This commit is contained in:
@@ -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` 相同。
|
||||
|
||||
Reference in New Issue
Block a user