From b935f890168f0f45d939764bcac5a14a62d42e57 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Mon, 8 Jun 2026 00:14:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Object=20=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=88=90=E5=91=98=E6=96=B9=E6=B3=95=E5=AF=B9=E9=9D=9E?= =?UTF-8?q?=20object=20=E5=AF=B9=E8=B1=A1=E6=8A=9B=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/src/builtins/object.rs | 46 +++++++++++++++++++++----- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/crates/oxide_vm/src/builtins/object.rs b/crates/oxide_vm/src/builtins/object.rs index 5e0c38d6..d7981ddc 100644 --- a/crates/oxide_vm/src/builtins/object.rs +++ b/crates/oxide_vm/src/builtins/object.rs @@ -264,27 +264,57 @@ fn require_obj_arg(vm: &mut Vm, args: &[u8], fn_name: &str) -> Result<*mut JsObj } pub fn object_freeze(vm: &mut Vm, args: &[u8]) -> NativeResult { - require_obj_arg(vm, args, "freeze")?; - Ok(vm.reg(args[1])) + if args.len() < 2 { + return Ok(JsValue::undefined()); + } + let val = vm.reg(args[1]); + if !val.is_object() || val.as_js_object_ptr().is_null() { + return Ok(val); + } + Ok(val) } pub fn object_seal(vm: &mut Vm, args: &[u8]) -> NativeResult { - require_obj_arg(vm, args, "seal")?; - Ok(vm.reg(args[1])) + if args.len() < 2 { + return Ok(JsValue::undefined()); + } + let val = vm.reg(args[1]); + if !val.is_object() || val.as_js_object_ptr().is_null() { + return Ok(val); + } + Ok(val) } pub fn object_prevent_extensions(vm: &mut Vm, args: &[u8]) -> NativeResult { - require_obj_arg(vm, args, "preventExtensions")?; - Ok(vm.reg(args[1])) + if args.len() < 2 { + return Ok(JsValue::undefined()); + } + let val = vm.reg(args[1]); + if !val.is_object() || val.as_js_object_ptr().is_null() { + return Ok(val); + } + Ok(val) } pub fn object_is_frozen(vm: &mut Vm, args: &[u8]) -> NativeResult { - require_obj_arg(vm, args, "isFrozen")?; + if args.len() < 2 { + return Ok(JsValue::bool(true)); + } + let val = vm.reg(args[1]); + if !val.is_object() || val.as_js_object_ptr().is_null() { + return Ok(JsValue::bool(true)); + } Ok(JsValue::bool(false)) } pub fn object_is_sealed(vm: &mut Vm, args: &[u8]) -> NativeResult { - require_obj_arg(vm, args, "isSealed")?; + if args.len() < 2 { + return Ok(JsValue::bool(true)); + } + let val = vm.reg(args[1]); + if !val.is_object() || val.as_js_object_ptr().is_null() { + return Ok(JsValue::bool(true)); + } Ok(JsValue::bool(false)) }