mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-27 04:01:11 +08:00
fix: 数组长度按虚拟属性处理定义与截断
This commit is contained in:
@@ -73,7 +73,9 @@ pub fn reflect_construct<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
///
|
||||
/// # 注意事项
|
||||
/// - 与 `Object.defineProperty` 共用 `define_from_descriptor`:缺失字段回填现有
|
||||
/// 属性、模块命名空间 exotic 收窄语义一处生效;错误投影为布尔 false。
|
||||
/// 属性、模块命名空间 exotic 收窄语义一处生效;普通失败投影为布尔 false。
|
||||
/// - 数组 length 的非法值(`"RangeError: "` 前缀)按规范抛 RangeError,不投影为
|
||||
/// false。
|
||||
pub fn reflect_define_property<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
let target_val = arg(vm, args, 1);
|
||||
let Some(target_ptr) = object_ptr(target_val) else {
|
||||
@@ -85,8 +87,13 @@ pub fn reflect_define_property<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResu
|
||||
};
|
||||
|
||||
let key_si = vm.property_key_si(arg(vm, args, 2));
|
||||
let result = crate::object::define_from_descriptor(vm, target_ptr, key_si, desc_val);
|
||||
NativeResult::Ok(JsValue::bool(result.is_ok()))
|
||||
match crate::object::define_from_descriptor(vm, target_ptr, key_si, desc_val) {
|
||||
Ok(()) => NativeResult::Ok(JsValue::bool(true)),
|
||||
Err(msg) => match msg.strip_prefix("RangeError: ") {
|
||||
Some(rest) => NativeResult::Err(crate::error::create_range_error(vm, rest)),
|
||||
None => NativeResult::Ok(JsValue::bool(false)),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/// `Reflect.deleteProperty(target, key)`:删除自身属性;
|
||||
|
||||
Reference in New Issue
Block a user