fix(vm): 数组元素访问器属性触发 getter 并透传异常

This commit is contained in:
爱特每羊队
2026-08-07 15:05:44 +08:00
parent f4d95f373e
commit 6ed0d42489
2 changed files with 44 additions and 11 deletions
+18
View File
@@ -31,6 +31,24 @@ impl Vm {
if obj.is_array() {
if let Some(index) = self.array_index_from_property_key(prop_name_si) {
if index < obj.prop_vec_len() as u32 {
// 数组元素为访问器属性(defineProperty getter)时须触发
// getter,而非直接读数据槽。
if let Some(meta) = obj.prop_meta_at(index) {
if meta.is_accessor {
return if meta.get.is_undefined() {
Ok(JsValue::undefined())
} else if let Some(tr) = target_reg {
let getter = meta.get;
let pushed = self.push_bytecode_getter_frame(getter, receiver, tr)?;
if pushed {
return Ok(JsValue::undefined());
}
Ok(self.regs[tr as usize])
} else {
self.call_function_sync(meta.get, receiver, &[])
};
}
}
return Ok(obj.get_prop_at(index));
}
}