fix: 修复 Object 部分成员方法对非 object 对象抛类型错误问题

This commit is contained in:
爱特每羊队
2026-06-08 00:14:11 +08:00
parent d2847254d4
commit 21285f1768
+38 -8
View File
@@ -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 { pub fn object_freeze(vm: &mut Vm, args: &[u8]) -> NativeResult {
require_obj_arg(vm, args, "freeze")?; if args.len() < 2 {
Ok(vm.reg(args[1])) 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 { pub fn object_seal(vm: &mut Vm, args: &[u8]) -> NativeResult {
require_obj_arg(vm, args, "seal")?; if args.len() < 2 {
Ok(vm.reg(args[1])) 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 { pub fn object_prevent_extensions(vm: &mut Vm, args: &[u8]) -> NativeResult {
require_obj_arg(vm, args, "preventExtensions")?; if args.len() < 2 {
Ok(vm.reg(args[1])) 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 { 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)) Ok(JsValue::bool(false))
} }
pub fn object_is_sealed(vm: &mut Vm, args: &[u8]) -> NativeResult { 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)) Ok(JsValue::bool(false))
} }