feat: 解构模式语义补齐(REST 枚举/getter/computed 排除、IteratorClose、RegAlloc def 干涉、for-in 捕获遮蔽)

This commit is contained in:
爱特每羊队
2026-08-09 15:01:31 +08:00
parent 0e620ff963
commit 8f8c9a39ff
12 changed files with 294 additions and 61 deletions
+12 -2
View File
@@ -65,9 +65,19 @@ pub(crate) fn try_make_iterator<H: VmHost>(vm: &mut H, value: JsValue) -> Result
vm.set_or_create_prop_value(wrapper_obj, next_si, next_fn);
// 把 IteratorClose 转发给内层迭代器,使 for-of 异常退出时可清理。
// 仅当内层提供可调用的 return 方法时包装器才暴露 return:内建集合
// (数组/字符串等索引迭代)无 return 方法,此时 GetMethod 应返回 undefined
// (IteratorClose 跳过),否则 return() 结果 undefined 会被误判为非对象报错。
let return_si = vm.kernel_core().perm_interner().intern("return").0;
let return_fn = make_native_function(vm, "return", iterator_wrapper_return::<H> as *const (), 0);
vm.set_or_create_prop_value(wrapper_obj, return_si, return_fn);
if inner.is_object() {
let inner_obj = unsafe { &*inner.as_js_object_ptr() };
if let Ok(return_fn) = vm.ordinary_get(inner_obj, return_si, inner) {
if is_callable(return_fn) {
let wrapper_return = make_native_function(vm, "return", iterator_wrapper_return::<H> as *const (), 0);
vm.set_or_create_prop_value(wrapper_obj, return_si, wrapper_return);
}
}
}
Ok(Some(JsValue::from_js_object(wrapper)))
}