mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
refactor: 正则与缓冲区族符号键改经 realm 维度编码并推进版本
This commit is contained in:
Generated
+18
-18
@@ -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",
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ members = [
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.8.54"
|
||||
version = "0.8.55"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
rust-version = "1.80"
|
||||
|
||||
@@ -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<H: VmHost>(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)),
|
||||
|
||||
@@ -242,7 +242,7 @@ fn species_constructor<H: VmHost>(
|
||||
}
|
||||
// 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<H: VmHost>(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")),
|
||||
|
||||
@@ -65,7 +65,7 @@ pub(crate) fn is_regexp_live<H: VmHost>(vm: &mut H, val: JsValue) -> Result<bool
|
||||
if !val.is_object() {
|
||||
return Ok(false);
|
||||
}
|
||||
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 ptr = val.as_js_object_ptr();
|
||||
// SAFETY: val 已校验为非空对象值。
|
||||
let obj = unsafe { &*ptr };
|
||||
@@ -86,7 +86,7 @@ pub(crate) fn is_regexp_live<H: VmHost>(vm: &mut H, val: JsValue) -> Result<bool
|
||||
fn rx_get_replace_method<H: VmHost>(
|
||||
vm: &mut H, rx: *mut JsObject, this_val: JsValue,
|
||||
) -> Result<Option<JsValue>, 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<H: VmHost>(
|
||||
/// GetMethod(sep, @@split):undefined/null 返回 None(落字符串臂),不可调用
|
||||
/// 抛 TypeError,属性读抛错恢复原异常值。
|
||||
fn rx_get_split_method<H: VmHost>(vm: &mut H, sep: JsValue) -> Result<Option<JsValue>, 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<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
|
||||
/// GetMethod(rx, @@match):可调用返回之,null/undefined/不可调用抛 TypeError;
|
||||
/// 属性读抛错恢复原异常值。
|
||||
fn rx_get_match_method<H: VmHost>(vm: &mut H, rx: *mut JsObject, this_val: JsValue) -> Result<JsValue, 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 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<H: VmHost>(vm: &mut H, rx: *mut JsObject, this_val: JsVal
|
||||
fn rx_get_match_method_opt<H: VmHost>(
|
||||
vm: &mut H, rx: *mut JsObject, this_val: JsValue,
|
||||
) -> Result<Option<JsValue>, 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<H: VmHost>(
|
||||
fn rx_get_search_method<H: VmHost>(
|
||||
vm: &mut H, rx: *mut JsObject, this_val: JsValue,
|
||||
) -> Result<Option<JsValue>, 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<H: VmHost>(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<H: VmHost>(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) {
|
||||
|
||||
@@ -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<H: VmHost>(
|
||||
} 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)),
|
||||
|
||||
Reference in New Issue
Block a user