From 3330c0fb8c65f378d4705509bf6f8986c4541007 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Mon, 5 Oct 2026 17:58:13 +0000 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B8=85=E7=90=86=20well-known=20symb?= =?UTF-8?q?ol=20=E5=AF=B9=E8=B1=A1=E5=86=92=E5=85=85=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E7=9A=84=E8=AF=BB=E4=BE=A7=E6=AD=BB=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 36 ++++++++-------- Cargo.toml | 2 +- crates/oxide_runtime_api/src/coercion.rs | 52 ++---------------------- crates/oxide_runtime_api/src/lib.rs | 4 +- crates/oxide_vm/src/vm/props.rs | 5 --- 5 files changed, 24 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a43c9e6d..243cde0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1095,7 +1095,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.8.11" +version = "0.8.12" dependencies = [ "chrono", "fast-float", @@ -1120,7 +1120,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.8.11" +version = "0.8.12" dependencies = [ "num-bigint", "oxide_log", @@ -1128,7 +1128,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1139,7 +1139,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.8.11" +version = "0.8.12" dependencies = [ "ansi_term", "bumpalo", @@ -1159,7 +1159,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.8.11" +version = "0.8.12" dependencies = [ "lru", "oxide_bytecode", @@ -1168,7 +1168,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1187,7 +1187,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1201,7 +1201,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.8.11" +version = "0.8.12" dependencies = [ "num-bigint", "oxc_allocator", @@ -1216,7 +1216,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1225,7 +1225,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.8.11" +version = "0.8.12" dependencies = [ "bumpalo", "dashmap", @@ -1240,7 +1240,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1252,7 +1252,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.8.11" +version = "0.8.12" dependencies = [ "tracing", "tracing-appender", @@ -1261,7 +1261,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1276,7 +1276,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1292,7 +1292,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.8.11" +version = "0.8.12" dependencies = [ "num-bigint", "num-traits", @@ -1304,7 +1304,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.8.11" +version = "0.8.12" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1321,7 +1321,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.8.11" +version = "0.8.12" dependencies = [ "bumpalo", "hashbrown 0.14.5", @@ -1333,7 +1333,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.8.11" +version = "0.8.12" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 8a0c68c3..303c482c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ ] [workspace.package] -version = "0.8.11" +version = "0.8.12" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_runtime_api/src/coercion.rs b/crates/oxide_runtime_api/src/coercion.rs index 3dab2a15..0eb2b922 100644 --- a/crates/oxide_runtime_api/src/coercion.rs +++ b/crates/oxide_runtime_api/src/coercion.rs @@ -977,18 +977,10 @@ fn string_to_bigint_full(host: &mut H, s: &str) -> Result(val: JsValue, host: &mut H) -> Result { - if val.is_object() { - if let Some(id) = well_known_symbol_id(host, val.as_js_object_ptr()) { - if let Some(name) = well_known_symbol_name(id) { - return Ok(format!("Symbol({name})")); - } - } - } // 原始 Symbol:步骤 2a,SymbolDescriptiveString(不经 ToString)。 if val.is_symbol() { let desc = host.symbol_description(val.as_symbol_index()).unwrap_or(""); @@ -1002,44 +994,6 @@ pub fn to_string_for_string_constructor(val: JsValue, host: &mut H) - Ok(to_string(primitive)) } -/// well-known symbol 以空对象存于 builtin world;把一个对象指针反查回它的 -/// well-known symbol id(0..WELL_KNOWN_SYMBOL_COUNT),非 well-known symbol 返回 None。 -pub fn well_known_symbol_id(host: &H, ptr: *mut JsObject) -> Option { - if ptr.is_null() { - return None; - } - let world = host.session().builtin_world(); - if std::ptr::eq(ptr, world.sym_iterator.as_ptr()) { - Some(0) - } else if std::ptr::eq(ptr, world.sym_match.as_ptr()) { - Some(1) - } else if std::ptr::eq(ptr, world.sym_replace.as_ptr()) { - Some(2) - } else if std::ptr::eq(ptr, world.sym_search.as_ptr()) { - Some(3) - } else if std::ptr::eq(ptr, world.sym_split.as_ptr()) { - Some(4) - } else if std::ptr::eq(ptr, world.sym_to_primitive.as_ptr()) { - Some(5) - } else if std::ptr::eq(ptr, world.sym_has_instance.as_ptr()) { - Some(6) - } else if std::ptr::eq(ptr, world.sym_match_all.as_ptr()) { - Some(7) - } else if std::ptr::eq(ptr, world.sym_async_iterator.as_ptr()) { - Some(8) - } else if std::ptr::eq(ptr, world.sym_to_string_tag.as_ptr()) { - Some(9) - } else if std::ptr::eq(ptr, world.sym_species.as_ptr()) { - Some(10) - } else if std::ptr::eq(ptr, world.sym_async_dispose.as_ptr()) { - Some(11) - } else if std::ptr::eq(ptr, world.sym_dispose.as_ptr()) { - Some(12) - } else { - None - } -} - /// well-known symbol id 的描述名(如 id 9 对应 `Symbol.toStringTag`)。 pub fn well_known_symbol_name(id: u32) -> Option<&'static str> { oxide_types::private_key::WELL_KNOWN_SYMBOL_NAMES.get(id as usize).copied() diff --git a/crates/oxide_runtime_api/src/lib.rs b/crates/oxide_runtime_api/src/lib.rs index 749a6aa3..8e1155c9 100644 --- a/crates/oxide_runtime_api/src/lib.rs +++ b/crates/oxide_runtime_api/src/lib.rs @@ -23,8 +23,8 @@ pub use coercion::{ materialize_string_box, push_to_string, push_units_to, relational_compare, same_value, same_value_zero, strict_equality, string_concat, string_value_eq, to_bigint_full, to_boolean, to_int32, to_integer_or_infinity, to_length, to_number, to_number_full, to_object, to_primitive, to_string, to_string_for_string_constructor, - to_string_full, to_string_value_full, to_uint32, to_units_full, well_known_symbol_id, well_known_symbol_name, - write_number_into, ToPrimitiveHint, + to_string_full, to_string_value_full, to_uint32, to_units_full, well_known_symbol_name, write_number_into, + ToPrimitiveHint, }; pub use host::VmHost; pub use native_result::NativeResult; diff --git a/crates/oxide_vm/src/vm/props.rs b/crates/oxide_vm/src/vm/props.rs index f061b82d..08c38a5e 100644 --- a/crates/oxide_vm/src/vm/props.rs +++ b/crates/oxide_vm/src/vm/props.rs @@ -59,12 +59,7 @@ impl Vm { if val.is_symbol() { return Ok(symbol_value_key(val.as_symbol_index())); } - // 遗留的 well-known symbol 空对象:按指针比对映射到各自的 well-known Symbol 键, - // 避免全部塌缩成同一个键。 if val.is_object() { - if let Some(id) = oxide_runtime_api::well_known_symbol_id(self, val.as_js_object_ptr()) { - return Ok(make_well_known_symbol_key(id)); - } // ToPropertyKey:对象经 ToPrimitive(string hint),结果为 Symbol 时直接作键; // 其余字符串按单元序列推导键(避免 lossy 文本桥接破坏孤立 surrogate 键)。 let prim = coercion::to_primitive(val, coercion::ToPrimitiveHint::String, self)?;