From 8f14b18ec8848e761e210042f9b757374093b110 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 18 Oct 2026 06:10:48 +0000 Subject: [PATCH] =?UTF-8?q?style:=20=E8=87=AA=E5=8A=A8=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/object.rs | 24 +++++++++---------- .../oxide_vm/tests/builtins_function_tests.rs | 6 +---- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/crates/oxide_builtins/src/object.rs b/crates/oxide_builtins/src/object.rs index 5082ee08..4b66464a 100644 --- a/crates/oxide_builtins/src/object.rs +++ b/crates/oxide_builtins/src/object.rs @@ -235,7 +235,8 @@ pub type OwnKeys<'a> = (Vec<(u32, u32)>, &'a JsObject); /// ownKeys 代理路径统一错误出口:优先从 uncaught 侧通道还原原始异常值 /// (保 trap 抛出原值的身份),侧通道为空时按格式化文本构造异常。 fn own_keys_trap_exc(vm: &mut H, msg: String) -> JsValue { - vm.take_uncaught_value().unwrap_or_else(|| crate::error::create_from_text(vm, &msg)) + vm.take_uncaught_value() + .unwrap_or_else(|| crate::error::create_from_text(vm, &msg)) } pub fn own_keys_proxy_aware<'a, H: VmHost>(vm: &mut H, obj: &'a JsObject) -> Result, JsValue> { @@ -295,7 +296,9 @@ pub fn own_keys_proxy_aware<'a, H: VmHost>(vm: &mut H, obj: &'a JsObject) -> Res } else { vm.perm_intern(&i.to_string()) }; - let val = vm.ordinary_get(result_obj, key_si, result).map_err(|msg| own_keys_trap_exc(vm, msg))?; + let val = vm + .ordinary_get(result_obj, key_si, result) + .map_err(|msg| own_keys_trap_exc(vm, msg))?; let si = vm.to_property_key_si(val).map_err(|msg| own_keys_trap_exc(vm, msg))?; if !val.is_string() && !val.is_symbol() { return Err(crate::error::create_type_error( @@ -1912,11 +1915,10 @@ fn proxy_prevent_extensions(vm: &mut H, obj: &JsObject) -> Result r, - Err(msg) => return Err(own_keys_trap_exc(vm, msg)), - }; + let trap_result = match vm.proxy_call_trap(obj, vm.perm_intern("preventExtensions"), &[target]) { + Ok(r) => r, + Err(msg) => return Err(own_keys_trap_exc(vm, msg)), + }; let Some(r) = trap_result else { // OrdinaryPreventExtensions(target):置不可扩展标志。 // SAFETY: target 由构造器校验为非空对象指针。 @@ -1940,9 +1942,7 @@ fn proxy_prevent_extensions(vm: &mut H, obj: &JsObject) -> Result( - vm: &mut H, obj_ptr: *mut JsObject, frozen: bool, -) -> Result<(), JsValue> { +fn proxy_set_integrity_level(vm: &mut H, obj_ptr: *mut JsObject, frozen: bool) -> Result<(), JsValue> { // SAFETY: obj_ptr 为存活对象指针。 let obj = unsafe { &*obj_ptr }; proxy_prevent_extensions(vm, obj)?; @@ -1956,9 +1956,7 @@ fn proxy_set_integrity_level( // 恒为 {Configurable: false},无需读描述符。 let is_accessor = if frozen { match own_descriptor_of(vm, obj, si)? { - Some(desc) => { - own_field(vm, desc, get_si)?.is_some() || own_field(vm, desc, set_si)?.is_some() - } + Some(desc) => own_field(vm, desc, get_si)?.is_some() || own_field(vm, desc, set_si)?.is_some(), None => false, } } else { diff --git a/crates/oxide_vm/tests/builtins_function_tests.rs b/crates/oxide_vm/tests/builtins_function_tests.rs index e7655a0f..bde97248 100644 --- a/crates/oxide_vm/tests/builtins_function_tests.rs +++ b/crates/oxide_vm/tests/builtins_function_tests.rs @@ -507,11 +507,7 @@ fn dynamic_function_prototype_descriptor_not_configurable() { .unwrap(); assert_eq!(vm.lookup_str(result).unwrap_or_default(), "true,false,false"); // 普通函数同口径:delete 失败且值不变。 - let result = eval( - &mut vm, - "function h() {} var p = h.prototype; delete h.prototype; h.prototype === p", - ) - .unwrap(); + let result = eval(&mut vm, "function h() {} var p = h.prototype; delete h.prototype; h.prototype === p").unwrap(); assert!(result.as_bool()); }