fix: 修复 Object 部分成员方法对非 object 对象抛类型错误问题
This commit is contained in:
@@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user