mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
feat: 落地原型面七方法 trait 路由与内建入口改接
This commit is contained in:
@@ -327,6 +327,65 @@ pub trait VmHost {
|
||||
/// Proxy trap 返回值布尔投影:非布尔返回抛 TypeError。
|
||||
fn proxy_trap_bool_result(&self, result: JsValue, trap_name: &str) -> Result<bool, String>;
|
||||
|
||||
// 原型与扩展性面(代理感知路由:代理经 trap 路由、非代理委托固有语义)
|
||||
/// `[[GetPrototypeOf]]`:返回对象的 prototype(对象或 null);代理经
|
||||
/// getPrototypeOf trap 路由——缺失落穿 target 的 `[[GetPrototypeOf]]`,
|
||||
/// trap 返值须为对象或 null,否则抛 TypeError。
|
||||
///
|
||||
/// # 边界与前提
|
||||
/// - `obj` 须为存活对象;代理的 target 由构造器校验为非空对象指针。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn get_prototype_of(&mut self, obj: &JsObject) -> Result<JsValue, String>;
|
||||
/// `[[SetPrototypeOf]]`:设置 prototype(对象或 null)。
|
||||
///
|
||||
/// # 返回值
|
||||
/// - `Ok(true)` 设置成功;`Ok(false)` 未设置(不可扩展且新旧原型不同,
|
||||
/// 或新原型已在原型链上构成环);`Err` 为 TypeError(trap 报告与
|
||||
/// target 实际状态不一致等)。
|
||||
///
|
||||
/// # 边界与前提
|
||||
/// - `proto` 须为对象或 null(调用方入口校验)。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn set_prototype_of(&mut self, obj: &mut JsObject, proto: JsValue) -> Result<bool, String>;
|
||||
/// `[[IsExtensible]]`:返回可扩展标志;代理经 isExtensible trap 路由
|
||||
/// (结果经布尔投影),trap 缺失落穿 target。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn is_extensible(&mut self, obj: &JsObject) -> Result<bool, String>;
|
||||
/// `[[PreventExtensions]]`:置不可扩展标志;代理经 preventExtensions
|
||||
/// trap 路由(结果经布尔投影,报告须与 target 实际可扩展状态一致),
|
||||
/// trap 缺失落穿 target 的普通 preventExtensions。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn prevent_extensions(&mut self, obj: &mut JsObject) -> Result<(), String>;
|
||||
/// `[[OwnPropertyKeys]]`:返回自身属性键列表(JS 可见键值,整数键升序
|
||||
/// 在前、字符串键插入序、Symbol 键插入序);代理经 ownKeys trap 路由
|
||||
/// (缺失落穿 target 自身键,重复键与不可配置键做不变量检查)。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn own_keys(&mut self, obj: &JsObject) -> Result<Vec<JsValue>, String>;
|
||||
/// `[[GetOwnProperty]]`:返回自身属性描述符对象(JS 可见形态);缺失
|
||||
/// 返回 `Ok(None)`;代理经 getOwnPropertyDescriptor trap 路由(缺失
|
||||
/// 落穿 target 自身描述符,undefined 与对象返值做不变量交叉检查)。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn get_own_property_desc(&mut self, obj: &JsObject, key_si: u32) -> Result<Option<JsValue>, String>;
|
||||
/// `[[Delete]]`:删除自身属性并投影为布尔(成功 true、不可配置 false);
|
||||
/// 代理经 deleteProperty trap 路由(缺失落穿 target 普通删除,报 true
|
||||
/// 时 target 自身属性不可配置或 target 不可扩展抛 TypeError)。
|
||||
///
|
||||
/// # 副作用
|
||||
/// - 可能执行用户 trap 代码(含分配与 GC);revoked 抛 TypeError。
|
||||
fn delete_own(&mut self, obj: &mut JsObject, key_si: u32) -> Result<bool, String>;
|
||||
|
||||
// 属性定义
|
||||
fn define_data_property(
|
||||
&mut self, obj: &mut JsObject, prop_name_si: u32, val: JsValue, attributes: PropAttributes,
|
||||
|
||||
Reference in New Issue
Block a user