mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
fix: 对象建键入口统一走 property_key_si 规范化,数字键不再分裂
Object.fromEntries/JSON.parse/new Map 对象 entry/rest 解构静态 excluded 四处直接 intern 动态字符串键绕过整数键区间映射,规范数字键分裂为 字符串键与整数键两个键。统一经 string_key_si 规范化:规范数字串映射 整数键,其余 intern 字符串键,与 property_key_si 字符串分支口径一致。 make_int_key 增加 debug 断言兜底索引越界。
This commit is contained in:
@@ -210,8 +210,10 @@ pub fn map_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
if !crate::iterator::is_callable(adder) {
|
||||
return NativeResult::Err(crate::error::create_type_error(vm, "Map.set is not callable"));
|
||||
}
|
||||
let key_si = vm.kernel_core().perm_interner().intern("0").0;
|
||||
let value_si = vm.kernel_core().perm_interner().intern("1").0;
|
||||
// entry 读取键按 ToPropertyKey 规范化:数组 entry 的元素区与对象 entry
|
||||
// 的 shape 链都走整数键,保证 `[k,v]` 与 `{0:k,1:v}` 两种形态都命中。
|
||||
let key_si = vm.property_key_si(JsValue::int(0));
|
||||
let value_si = vm.property_key_si(JsValue::int(1));
|
||||
if let Err(err) = crate::iterator::iterate_elements(vm, iterable, |vm, item| {
|
||||
if !item.is_object() {
|
||||
return Err(crate::error::create_type_error(vm, "iterator value is not an entry object"));
|
||||
|
||||
Reference in New Issue
Block a user