From 641e4f6065dc3ce1c83c388d75d372b9ad808106 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Wed, 7 Oct 2026 04:12:09 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=AD=A3=E5=88=99=E4=B8=8E?= =?UTF-8?q?=E7=BC=93=E5=86=B2=E5=8C=BA=E6=97=8F=E7=AC=A6=E5=8F=B7=E9=94=AE?= =?UTF-8?q?=E6=94=B9=E7=BB=8F=20realm=20=E7=BB=B4=E5=BA=A6=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=B9=B6=E6=8E=A8=E8=BF=9B=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 36 +++++++++++------------ Cargo.toml | 2 +- crates/oxide_builtins/src/array_buffer.rs | 4 +-- crates/oxide_builtins/src/regexp.rs | 4 +-- crates/oxide_builtins/src/string/regex.rs | 16 +++++----- crates/oxide_builtins/src/typed_array.rs | 4 +-- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2fb91e35..ae8cc35a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.8.54" +version = "0.8.55" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.8.54" +version = "0.8.55" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.8.54" +version = "0.8.55" dependencies = [ "ansi_term", "bumpalo", @@ -1225,7 +1225,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.8.54" +version = "0.8.55" dependencies = [ "lru", "oxide_bytecode", @@ -1234,7 +1234,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1253,7 +1253,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1267,7 +1267,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.8.54" +version = "0.8.55" dependencies = [ "num-bigint", "oxc_allocator", @@ -1282,7 +1282,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1291,7 +1291,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.8.54" +version = "0.8.55" dependencies = [ "bumpalo", "dashmap", @@ -1306,7 +1306,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1318,7 +1318,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.8.54" +version = "0.8.55" dependencies = [ "tracing", "tracing-appender", @@ -1327,7 +1327,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1342,7 +1342,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1358,7 +1358,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.8.54" +version = "0.8.55" dependencies = [ "num-bigint", "num-traits", @@ -1370,7 +1370,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.8.54" +version = "0.8.55" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1387,7 +1387,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.8.54" +version = "0.8.55" dependencies = [ "bumpalo", "hashbrown 0.14.5", @@ -1399,7 +1399,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.8.54" +version = "0.8.55" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 1287576b..5b9131a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ ] [workspace.package] -version = "0.8.54" +version = "0.8.55" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_builtins/src/array_buffer.rs b/crates/oxide_builtins/src/array_buffer.rs index 46554dbe..20ebb791 100644 --- a/crates/oxide_builtins/src/array_buffer.rs +++ b/crates/oxide_builtins/src/array_buffer.rs @@ -1,6 +1,6 @@ use oxide_kernel::shape_forge::EMPTY_SHAPE_ID; use oxide_types::object::{JsObject, NativeFnPtr}; -use oxide_types::private_key::{make_well_known_symbol_key, WELL_KNOWN_SYMBOL_SPECIES}; +use oxide_types::private_key::{encode_symbol_key, WELL_KNOWN_SYMBOL_SPECIES}; use oxide_types::value::JsValue; use oxide_runtime_api::{NativeResult, VmHost}; @@ -819,7 +819,7 @@ fn ab_species_constructor(vm: &mut H, o_val: JsValue, default_ctor: J if !c.is_object() { return Err(crate::error::create_type_error(vm, "buffer constructor is not an object")); } - let species_key = make_well_known_symbol_key(WELL_KNOWN_SYMBOL_SPECIES); + let species_key = encode_symbol_key(vm.realm_id(), WELL_KNOWN_SYMBOL_SPECIES); let s = match vm.ordinary_get(unsafe { &*c.as_js_object_ptr() }, species_key, c) { Ok(v) => v, Err(msg) => return Err(crate::iterator::engine_error(vm, &msg)), diff --git a/crates/oxide_builtins/src/regexp.rs b/crates/oxide_builtins/src/regexp.rs index 7c0f4923..8591d7b1 100644 --- a/crates/oxide_builtins/src/regexp.rs +++ b/crates/oxide_builtins/src/regexp.rs @@ -242,7 +242,7 @@ fn species_constructor( } // Get(C, @@species) 的 receiver 是构造器 C 本身:访问器 getter 返回 // receiver,传实例会让返回值错指到接收者本体。 - let species_key = oxide_types::private_key::make_well_known_symbol_key(10); + let species_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 10); let c_val = JsValue::from_js_object(c.as_js_object_ptr()); let s = match vm.ordinary_get(unsafe { &*c.as_js_object_ptr() }, species_key, c_val) { Ok(v) => v, @@ -1831,7 +1831,7 @@ pub fn regexp_symbol_match_all(vm: &mut H, args: &[u8]) -> NativeResu let is_unicode = flags.contains('u') || flags.contains('v'); // 旧式 IsRegExp:Get(R, @@match) 为布尔取之,否则 true。 - let match_key = oxide_types::private_key::make_well_known_symbol_key(1); + let match_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 1); let matcher_prop = match vm.ordinary_get(unsafe { &*re_ptr }, match_key, this_val) { Ok(v) => v, Err(_) => return NativeResult::Err(crate::iterator::engine_error(vm, "cannot read @@match")), diff --git a/crates/oxide_builtins/src/string/regex.rs b/crates/oxide_builtins/src/string/regex.rs index 027cad1b..6cabbfc6 100644 --- a/crates/oxide_builtins/src/string/regex.rs +++ b/crates/oxide_builtins/src/string/regex.rs @@ -65,7 +65,7 @@ pub(crate) fn is_regexp_live(vm: &mut H, val: JsValue) -> Result(vm: &mut H, val: JsValue) -> Result( vm: &mut H, rx: *mut JsObject, this_val: JsValue, ) -> Result, JsValue> { - let replace_key = oxide_types::private_key::make_well_known_symbol_key(2); + let replace_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 2); // SAFETY: this_val 为对象值,rx 与其同址。 let func = match vm.ordinary_get(unsafe { &*rx }, replace_key, this_val) { Ok(v) => v, @@ -166,7 +166,7 @@ fn string_arm_replace( /// GetMethod(sep, @@split):undefined/null 返回 None(落字符串臂),不可调用 /// 抛 TypeError,属性读抛错恢复原异常值。 fn rx_get_split_method(vm: &mut H, sep: JsValue) -> Result, JsValue> { - let split_key = oxide_types::private_key::make_well_known_symbol_key(4); + let split_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 4); let ptr = sep.as_js_object_ptr(); // SAFETY: 调用方已校验 sep 为非空对象值。 let func = match vm.ordinary_get(unsafe { &*ptr }, split_key, sep) { @@ -569,7 +569,7 @@ pub fn string_match_fn(vm: &mut H, args: &[u8]) -> NativeResult { /// GetMethod(rx, @@match):可调用返回之,null/undefined/不可调用抛 TypeError; /// 属性读抛错恢复原异常值。 fn rx_get_match_method(vm: &mut H, rx: *mut JsObject, this_val: JsValue) -> Result { - let match_key = oxide_types::private_key::make_well_known_symbol_key(1); + let match_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 1); let matcher = match vm.ordinary_get(unsafe { &*rx }, match_key, this_val) { Ok(v) => v, Err(e) => return Err(crate::iterator::engine_error(vm, &e)), @@ -585,7 +585,7 @@ fn rx_get_match_method(vm: &mut H, rx: *mut JsObject, this_val: JsVal fn rx_get_match_method_opt( vm: &mut H, rx: *mut JsObject, this_val: JsValue, ) -> Result, JsValue> { - let match_key = oxide_types::private_key::make_well_known_symbol_key(1); + let match_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 1); let func = match vm.ordinary_get(unsafe { &*rx }, match_key, this_val) { Ok(v) => v, Err(e) => return Err(crate::iterator::engine_error(vm, &e)), @@ -604,7 +604,7 @@ fn rx_get_match_method_opt( fn rx_get_search_method( vm: &mut H, rx: *mut JsObject, this_val: JsValue, ) -> Result, JsValue> { - let search_key = oxide_types::private_key::make_well_known_symbol_key(3); + let search_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 3); let func = match vm.ordinary_get(unsafe { &*rx }, search_key, this_val) { Ok(v) => v, Err(e) => return Err(crate::iterator::engine_error(vm, &e)), @@ -843,7 +843,7 @@ pub fn string_match_all(vm: &mut H, args: &[u8]) -> NativeResult { } // GetMethod(pattern, @@matchAll) 全链单次 Get:own 命中 undefined/null // 即停(Get 语义),不回退原型链。 - let match_all_key = oxide_types::private_key::make_well_known_symbol_key(7); + let match_all_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 7); let matcher = match vm.ordinary_get(unsafe { &*pattern_val.as_js_object_ptr() }, match_all_key, pattern_val) { Ok(v) => v, Err(e) => return NativeResult::err(crate::iterator::engine_error(vm, &e)), @@ -944,7 +944,7 @@ fn match_all_construct_invoke(vm: &mut H, this_val: JsValue, pattern_ } // Invoke(regexp, @@matchAll, « string »):产物全链 Get,无 callable 抛 TypeError。 - let match_all_key = oxide_types::private_key::make_well_known_symbol_key(7); + let match_all_key = oxide_types::private_key::encode_symbol_key(vm.realm_id(), 7); let rx_ptr = rx_val.as_js_object_ptr(); let rx_this = JsValue::from_js_object(rx_ptr); let matcher = match vm.ordinary_get(unsafe { &*rx_ptr }, match_all_key, rx_this) { diff --git a/crates/oxide_builtins/src/typed_array.rs b/crates/oxide_builtins/src/typed_array.rs index 9bf4bcca..58eeae07 100644 --- a/crates/oxide_builtins/src/typed_array.rs +++ b/crates/oxide_builtins/src/typed_array.rs @@ -2,7 +2,7 @@ use num_bigint::BigInt; use num_traits::ToPrimitive; use oxide_kernel::shape_forge::EMPTY_SHAPE_ID; use oxide_types::object::{JsObject, NativeFnPtr, TypedArrayKind}; -use oxide_types::private_key::{int_key_value, is_int_key, make_well_known_symbol_key, WELL_KNOWN_SYMBOL_SPECIES}; +use oxide_types::private_key::{encode_symbol_key, int_key_value, is_int_key, WELL_KNOWN_SYMBOL_SPECIES}; use oxide_types::value::JsValue; use crate::array_buffer::{ @@ -1151,7 +1151,7 @@ fn typed_array_species_create( } else if !c.is_object() { return Err(type_error(vm, "Species constructor not a constructor")); } else { - let species_key = make_well_known_symbol_key(WELL_KNOWN_SYMBOL_SPECIES); + let species_key = encode_symbol_key(vm.realm_id(), WELL_KNOWN_SYMBOL_SPECIES); let s = match vm.ordinary_get(unsafe { &*c.as_js_object_ptr() }, species_key, c) { Ok(v) => v, Err(msg) => return Err(crate::iterator::engine_error(vm, &msg)),