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:
@@ -113,3 +113,19 @@ fn map_new_delete() {
|
||||
let r = eval(&mut vm, "var m = new Map(); m.set('x', 10); m.delete('x'); m.has('x')").unwrap();
|
||||
assert!(!r.as_bool());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn map_new_object_entry_pair_reads_key_and_value() {
|
||||
// 对象 entry({0:'k',1:'v'})的数字键是整数键:读取须经 ToPropertyKey 规范化。
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "var m = new Map([{0:'k',1:'v'}]); m.get('k')").unwrap();
|
||||
assert_eq!(str_val(&vm, r), "v");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn map_new_mixed_array_and_object_entries() {
|
||||
// 数组 entry 与对象 entry 两种形态混合可共存。
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "var m = new Map([['a',1],{0:'b',1:2}]); m.get('a') + '/' + m.get('b')").unwrap();
|
||||
assert_eq!(str_val(&vm, r), "1/2");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user