mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
chore: 清理 well-known symbol 对象冒充路径的读侧死代码
This commit is contained in:
Generated
+18
-18
@@ -1095,7 +1095,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_builtins"
|
name = "oxide_builtins"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"fast-float",
|
"fast-float",
|
||||||
@@ -1120,7 +1120,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_bytecode"
|
name = "oxide_bytecode"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"oxide_log",
|
"oxide_log",
|
||||||
@@ -1128,7 +1128,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_cfg"
|
name = "oxide_cfg"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_emit",
|
"oxide_emit",
|
||||||
@@ -1139,7 +1139,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_cli"
|
name = "oxide_cli"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
@@ -1159,7 +1159,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_code_cache"
|
name = "oxide_code_cache"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lru",
|
"lru",
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
@@ -1168,7 +1168,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_compiler"
|
name = "oxide_compiler"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1187,7 +1187,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_dce"
|
name = "oxide_dce"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1201,7 +1201,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_emit"
|
name = "oxide_emit"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"oxc_allocator",
|
"oxc_allocator",
|
||||||
@@ -1216,7 +1216,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_ir"
|
name = "oxide_ir"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_log",
|
"oxide_log",
|
||||||
@@ -1225,7 +1225,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_kernel"
|
name = "oxide_kernel"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
@@ -1240,7 +1240,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_liveness"
|
name = "oxide_liveness"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1252,7 +1252,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_log"
|
name = "oxide_log"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-appender",
|
"tracing-appender",
|
||||||
@@ -1261,7 +1261,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_parser"
|
name = "oxide_parser"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxc_allocator",
|
"oxc_allocator",
|
||||||
"oxc_ast",
|
"oxc_ast",
|
||||||
@@ -1276,7 +1276,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_regalloc"
|
name = "oxide_regalloc"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1292,7 +1292,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_runtime_api"
|
name = "oxide_runtime_api"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
@@ -1304,7 +1304,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_test262"
|
name = "oxide_test262"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_compiler",
|
"oxide_compiler",
|
||||||
@@ -1321,7 +1321,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_types"
|
name = "oxide_types"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
@@ -1333,7 +1333,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_vm"
|
name = "oxide_vm"
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.8.11"
|
version = "0.8.12"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
rust-version = "1.80"
|
rust-version = "1.80"
|
||||||
|
|||||||
@@ -977,18 +977,10 @@ fn string_to_bigint_full<H: VmHost>(host: &mut H, s: &str) -> Result<JsValue, St
|
|||||||
Ok(host.new_bigint(if neg { -m } else { m }))
|
Ok(host.new_bigint(if neg { -m } else { m }))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `String()` 构造器的字符串转换(§21.1.1.1):原始 Symbol 值(及本引擎以空对象
|
/// `String()` 构造器的字符串转换(§21.1.1.1):原始 Symbol 值返回描述串
|
||||||
/// 表示的 well-known symbol)返回描述串 `Symbol(desc)`(步骤 2a);其余走完整
|
/// `Symbol(desc)`(步骤 2a);其余走完整 ToString(步骤 3)——装箱 Symbol 的
|
||||||
/// ToString(步骤 3)——装箱 Symbol 的 ToPrimitive 返回 Symbol 本体,ToString 抛
|
/// ToPrimitive 返回 Symbol 本体,ToString 抛 TypeError。
|
||||||
/// TypeError。
|
|
||||||
pub fn to_string_for_string_constructor<H: VmHost>(val: JsValue, host: &mut H) -> Result<String, String> {
|
pub fn to_string_for_string_constructor<H: VmHost>(val: JsValue, host: &mut H) -> Result<String, String> {
|
||||||
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)。
|
// 原始 Symbol:步骤 2a,SymbolDescriptiveString(不经 ToString)。
|
||||||
if val.is_symbol() {
|
if val.is_symbol() {
|
||||||
let desc = host.symbol_description(val.as_symbol_index()).unwrap_or("");
|
let desc = host.symbol_description(val.as_symbol_index()).unwrap_or("");
|
||||||
@@ -1002,44 +994,6 @@ pub fn to_string_for_string_constructor<H: VmHost>(val: JsValue, host: &mut H) -
|
|||||||
Ok(to_string(primitive))
|
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<H: VmHost + ?Sized>(host: &H, ptr: *mut JsObject) -> Option<u32> {
|
|
||||||
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`)。
|
/// well-known symbol id 的描述名(如 id 9 对应 `Symbol.toStringTag`)。
|
||||||
pub fn well_known_symbol_name(id: u32) -> Option<&'static str> {
|
pub fn well_known_symbol_name(id: u32) -> Option<&'static str> {
|
||||||
oxide_types::private_key::WELL_KNOWN_SYMBOL_NAMES.get(id as usize).copied()
|
oxide_types::private_key::WELL_KNOWN_SYMBOL_NAMES.get(id as usize).copied()
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ pub use coercion::{
|
|||||||
materialize_string_box, push_to_string, push_units_to, relational_compare, same_value, same_value_zero,
|
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,
|
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_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,
|
to_string_full, to_string_value_full, to_uint32, to_units_full, well_known_symbol_name, write_number_into,
|
||||||
write_number_into, ToPrimitiveHint,
|
ToPrimitiveHint,
|
||||||
};
|
};
|
||||||
pub use host::VmHost;
|
pub use host::VmHost;
|
||||||
pub use native_result::NativeResult;
|
pub use native_result::NativeResult;
|
||||||
|
|||||||
@@ -59,12 +59,7 @@ impl Vm {
|
|||||||
if val.is_symbol() {
|
if val.is_symbol() {
|
||||||
return Ok(symbol_value_key(val.as_symbol_index()));
|
return Ok(symbol_value_key(val.as_symbol_index()));
|
||||||
}
|
}
|
||||||
// 遗留的 well-known symbol 空对象:按指针比对映射到各自的 well-known Symbol 键,
|
|
||||||
// 避免全部塌缩成同一个键。
|
|
||||||
if val.is_object() {
|
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 时直接作键;
|
// ToPropertyKey:对象经 ToPrimitive(string hint),结果为 Symbol 时直接作键;
|
||||||
// 其余字符串按单元序列推导键(避免 lossy 文本桥接破坏孤立 surrogate 键)。
|
// 其余字符串按单元序列推导键(避免 lossy 文本桥接破坏孤立 surrogate 键)。
|
||||||
let prim = coercion::to_primitive(val, coercion::ToPrimitiveHint::String, self)?;
|
let prim = coercion::to_primitive(val, coercion::ToPrimitiveHint::String, self)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user