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
@@ -0,0 +1,29 @@
//! EventTarget 监听器注册表的数据类型:`ListenerEntry`(单条监听器登记)与
//! `EventTargetState`(一个目标的监听器集合,注册表值)。
//!
//! 本类型落 `oxide_runtime_api`(`VmHost` trait 所在层):`et_register` /
//! `et_lookup` 的签名引用 `ListenerEntry`,而 trait 不依赖 `oxide_builtins`
//! (依赖方向 `runtime_api ← builtins`),故类型须落在 trait 可引用的层。
use oxide_types::value::JsValue;
/// 单条监听器登记:事件类型 si、回调函数、捕获标志、once 标志、属性 handler 标志。
///
/// `type_si` 是事件类型串的 perm intern 下标(同型同回调同 capture 的重复登记为
/// no-op)。`callback` 是回调函数(GC 对象边)。`is_attribute` 区分属性 handler
/// (`onmessage` 等)与 `addEventListener` 登记(首版恒 false,属性 handler 由后续
/// 任务接入)。
#[derive(Clone, Debug)]
pub struct ListenerEntry {
pub type_si: u32,
pub callback: JsValue,
pub capture: bool,
pub once: bool,
pub is_attribute: bool,
}
/// 一个 EventTarget 的监听器集合(per-realm 弱引用注册表的值)。
#[derive(Clone, Debug, Default)]
pub struct EventTargetState {
pub listeners: Vec<ListenerEntry>,
}