mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
fix: 符号原语数值与字符串转换改抛类型错误
This commit is contained in:
@@ -46,23 +46,10 @@ pub fn bind_symbol(core: &Arc<KernelCore>, session: &KernelSession, global: &mut
|
||||
);
|
||||
|
||||
// well-known symbol 以符号原语绑定,下标与内建符号表(0..WELL_KNOWN_SYMBOL_COUNT)
|
||||
// 一一对应;键编码由该下标直接推出。
|
||||
for (name, id) in [
|
||||
("match", 1u32),
|
||||
("replace", 2),
|
||||
("search", 3),
|
||||
("split", 4),
|
||||
("iterator", 0),
|
||||
("toPrimitive", 5),
|
||||
("hasInstance", 6),
|
||||
("matchAll", 7),
|
||||
("asyncIterator", 8),
|
||||
("toStringTag", 9),
|
||||
("species", 10),
|
||||
("asyncDispose", 11),
|
||||
("dispose", 12),
|
||||
] {
|
||||
bind_well_known_symbol(core, ctor, name, JsValue::symbol(id));
|
||||
// 一一对应;名称表是 id/名映射的唯一来源,属性名去掉 `Symbol.` 前缀。
|
||||
for (id, full_name) in oxide_types::private_key::WELL_KNOWN_SYMBOL_NAMES.iter().enumerate() {
|
||||
let name = full_name.strip_prefix("Symbol.").unwrap_or(full_name);
|
||||
bind_well_known_symbol(core, ctor, name, JsValue::symbol(id as u32));
|
||||
}
|
||||
|
||||
bind_constructor!(core, global, "Symbol", ctor_ptr, oxide_builtins::symbol::symbol_constructor::<crate::vm::Vm>, 1, hash: true);
|
||||
|
||||
@@ -468,7 +468,8 @@ fn bind_iterator_protos(core: &Arc<KernelCore>, session: &KernelSession) {
|
||||
oxide_builtins::iterator::iterator_constructor_setter::<crate::vm::Vm> as *const (),
|
||||
);
|
||||
}
|
||||
let sym_to_string_tag = oxide_types::private_key::make_well_known_symbol_key(9);
|
||||
let sym_to_string_tag =
|
||||
oxide_types::private_key::make_well_known_symbol_key(oxide_types::private_key::WELL_KNOWN_SYMBOL_TO_STRING_TAG);
|
||||
if core
|
||||
.shape_forge()
|
||||
.lookup_position(iter_proto.shape_id(), sym_to_string_tag)
|
||||
@@ -487,13 +488,14 @@ fn bind_iterator_protos(core: &Arc<KernelCore>, session: &KernelSession) {
|
||||
}
|
||||
|
||||
// %IteratorPrototype% 的 @@dispose:显式资源管理下用 return 关闭迭代器。
|
||||
let sym_dispose = oxide_types::private_key::make_well_known_symbol_key(12);
|
||||
let dispose_id = oxide_types::private_key::WELL_KNOWN_SYMBOL_DISPOSE;
|
||||
let sym_dispose = oxide_types::private_key::make_well_known_symbol_key(dispose_id);
|
||||
if core.shape_forge().lookup_position(iter_proto.shape_id(), sym_dispose).is_none() {
|
||||
bind_well_known_method(
|
||||
world,
|
||||
core,
|
||||
iter_proto,
|
||||
12,
|
||||
dispose_id,
|
||||
"[Symbol.dispose]",
|
||||
oxide_builtins::iterator::iterator_dispose::<crate::vm::Vm> as *const (),
|
||||
0,
|
||||
|
||||
Reference in New Issue
Block a user