From 47912535d57fb0824d0be88c155ce12aa7de1f7c Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 8 Oct 2026 07:59:40 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=86=85=E7=BD=AE=E5=8D=81?= =?UTF-8?q?=E5=9B=9B=E6=96=87=E4=BB=B6=E8=BF=81=E7=A7=BB=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E5=99=A8=E8=B0=83=E7=94=A8=E8=87=B3=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 38 +++++++++---------- Cargo.toml | 2 +- crates/oxide_builtins/src/atomics.rs | 4 +- crates/oxide_builtins/src/bigint.rs | 5 +-- crates/oxide_builtins/src/boolean.rs | 4 +- crates/oxide_builtins/src/eval.rs | 2 +- crates/oxide_builtins/src/string/basic.rs | 4 +- crates/oxide_builtins/src/string/common.rs | 4 +- .../oxide_builtins/src/temporal/duration.rs | 4 +- crates/oxide_builtins/src/temporal/instant.rs | 4 +- .../oxide_builtins/src/temporal/plain_date.rs | 4 +- .../src/temporal/plain_date_time.rs | 4 +- .../src/temporal/plain_month_day.rs | 4 +- .../oxide_builtins/src/temporal/plain_time.rs | 4 +- .../src/temporal/plain_year_month.rs | 4 +- .../src/temporal/zoned_date_time.rs | 4 +- 16 files changed, 47 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4822d60b..4335a3cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.8.75" +version = "0.8.76" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.8.75" +version = "0.8.76" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.8.75" +version = "0.8.76" dependencies = [ "ansi_term", "bumpalo", @@ -1226,7 +1226,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.8.75" +version = "0.8.76" dependencies = [ "lru", "oxide_bytecode", @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1255,7 +1255,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.8.75" +version = "0.8.76" dependencies = [ "num-bigint", "oxc_allocator", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1305,7 +1305,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.8.75" +version = "0.8.76" dependencies = [ "bumpalo", "dashmap", @@ -1319,7 +1319,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.8.75" +version = "0.8.76" dependencies = [ "tracing", "tracing-appender", @@ -1340,7 +1340,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1355,7 +1355,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1371,7 +1371,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.8.75" +version = "0.8.76" dependencies = [ "num-bigint", "num-traits", @@ -1384,7 +1384,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.8.75" +version = "0.8.76" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1402,7 +1402,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.8.75" +version = "0.8.76" dependencies = [ "bumpalo", "dashmap", @@ -1415,7 +1415,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.8.75" +version = "0.8.76" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index c1f2c5ef..29717034 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ ] [workspace.package] -version = "0.8.75" +version = "0.8.76" edition = "2021" license = "MIT" rust-version = "1.80" diff --git a/crates/oxide_builtins/src/atomics.rs b/crates/oxide_builtins/src/atomics.rs index 0c9c692f..2ab3cc5c 100644 --- a/crates/oxide_builtins/src/atomics.rs +++ b/crates/oxide_builtins/src/atomics.rs @@ -13,7 +13,7 @@ use crate::typed_array::{ get_typed_array_data, read_element, ta_element_value, ta_to_integer_or_infinity, ta_validate, write_element, TypedArrayData, }; -use oxide_runtime_api::{NativeResult, VmHost}; +use oxide_runtime_api::{NativeResult, ProtoKind, VmHost}; macro_rules! native_try { ($expr:expr) => { @@ -369,7 +369,7 @@ pub fn atomics_is_lock_free(vm: &mut H, args: &[u8]) -> NativeResult /// waitAsync 结果对象:普通对象(proto = Object.prototype),own 属性 /// async/value 双 data 属性(普通创建路径默认形)。 fn wait_async_result_object(vm: &mut H, async_arm: bool, value: JsValue) -> JsValue { - let object_proto = vm.session().builtin_world().object_proto.as_ptr() as *mut JsObject; + let object_proto = vm.builtin_proto(ProtoKind::ObjectProto); let obj_ptr = vm.alloc_object(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(object_proto))); // SAFETY: alloc_object 返回存活 arena 指针,借出期间无别名。 let obj = unsafe { &mut *obj_ptr }; diff --git a/crates/oxide_builtins/src/bigint.rs b/crates/oxide_builtins/src/bigint.rs index fc9e2f52..b557fd22 100644 --- a/crates/oxide_builtins/src/bigint.rs +++ b/crates/oxide_builtins/src/bigint.rs @@ -1,5 +1,5 @@ use num_bigint::BigInt; -use oxide_runtime_api::{to_primitive, NativeResult, ToPrimitiveHint, VmHost}; +use oxide_runtime_api::{to_primitive, NativeResult, ProtoKind, ToPrimitiveHint, VmHost}; use oxide_types::value::JsValue; /// JS `BigInt(value)` 构造逻辑(§21.2.1.1): @@ -184,8 +184,7 @@ fn this_bigint_value(vm: &mut H, this_val: JsValue) -> Result(vm: &mut H, args: &[u8]) -> NativeResult { false }; - let boolean_proto = vm.session().builtin_world().boolean_proto.as_ptr() as *mut JsObject; + let boolean_proto = vm.builtin_proto(ProtoKind::BooleanProto); let is_ctor = if this_val.is_object() { let ptr = this_val.as_js_object_ptr(); if ptr.is_null() { diff --git a/crates/oxide_builtins/src/eval.rs b/crates/oxide_builtins/src/eval.rs index 00dcba15..c8a782db 100644 --- a/crates/oxide_builtins/src/eval.rs +++ b/crates/oxide_builtins/src/eval.rs @@ -38,7 +38,7 @@ pub fn eval(vm: &mut H, args: &[u8]) -> NativeResult { let code = oxide_kernel::string_forge::source_escape(&units); match vm.create_dynamic_script(&code) { Ok(func) => { - let global = JsValue::from_js_object(vm.session().global_object().as_ptr() as *mut JsObject); + let global = JsValue::from_js_object(vm.global_object().as_ptr() as *mut JsObject); match vm.call_function_sync(func, global, &[]) { Ok(val) => NativeResult::Ok(val), Err(e) => { diff --git a/crates/oxide_builtins/src/string/basic.rs b/crates/oxide_builtins/src/string/basic.rs index 8714f50b..6eb759a3 100644 --- a/crates/oxide_builtins/src/string/basic.rs +++ b/crates/oxide_builtins/src/string/basic.rs @@ -1,4 +1,4 @@ -use oxide_runtime_api::{NativeResult, VmHost}; +use oxide_runtime_api::{NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -114,7 +114,7 @@ pub fn string_value_of(vm: &mut H, args: &[u8]) -> NativeResult { /// JS `String()` 构造逻辑:把参数转成字符串(单元保真);new 语义返回 /// `[[StringData]]` 包装对象。 pub fn string_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let string_proto = vm.session().builtin_world().string_proto.as_ptr() as *mut JsObject; + let string_proto = vm.builtin_proto(ProtoKind::StringProto); let this_val = vm.reg(if args.is_empty() { 0 } else { args[0] }); let is_ctor = if this_val.is_object() { let ptr = this_val.as_js_object_ptr(); diff --git a/crates/oxide_builtins/src/string/common.rs b/crates/oxide_builtins/src/string/common.rs index 86904a6e..a373702c 100644 --- a/crates/oxide_builtins/src/string/common.rs +++ b/crates/oxide_builtins/src/string/common.rs @@ -4,7 +4,7 @@ use oxide_kernel::shape_forge::EMPTY_SHAPE_ID; use oxide_types::object::JsObject; use oxide_types::value::JsValue; -use oxide_runtime_api::VmHost; +use oxide_runtime_api::{ProtoKind, VmHost}; macro_rules! try_string { ($e:expr) => { @@ -398,7 +398,7 @@ pub(crate) fn split_limit_to_uint32(vm: &mut H, limit_val: JsValue) - /// 以已构造的字符串值构建字符串数组(元素零拷贝落地),供逐单元产出路径 /// (空分隔 split)复用,跳过 `Vec` 中间层。 pub(crate) fn make_string_array_values(vm: &mut H, parts: Vec) -> JsValue { - let proto = vm.session().builtin_world().array_proto.as_ptr() as *mut JsObject; + let proto = vm.builtin_proto(ProtoKind::ArrayProto); let n = parts.len(); let arr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto), n)); unsafe { diff --git a/crates/oxide_builtins/src/temporal/duration.rs b/crates/oxide_builtins/src/temporal/duration.rs index 47d95efb..fa0f384b 100644 --- a/crates/oxide_builtins/src/temporal/duration.rs +++ b/crates/oxide_builtins/src/temporal/duration.rs @@ -1,7 +1,7 @@ //! Temporal.Duration:ISO 字符串与 property bag 解析、构造、getter、total/round、 //! 加减比较与格式化。 -use oxide_runtime_api::{to_number, to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_number, to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -265,7 +265,7 @@ pub(crate) fn duration_like_values(vm: &mut H, val: JsValue) -> Resul /// `Temporal.Duration` 构造器,保存十个整数时长分量。 pub fn duration_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().duration_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::DurationProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/instant.rs b/crates/oxide_builtins/src/temporal/instant.rs index 3fb4e577..d7abdfd0 100644 --- a/crates/oxide_builtins/src/temporal/instant.rs +++ b/crates/oxide_builtins/src/temporal/instant.rs @@ -2,7 +2,7 @@ use chrono::Utc; use num_traits::ToPrimitive; -use oxide_runtime_api::{to_number, to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_number, to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -300,7 +300,7 @@ pub fn now_time_zone_id(vm: &mut H, _args: &[u8]) -> NativeResult { /// `Temporal.Instant` 构造器:把参数按 ToBigInt 转换为纪元纳秒。 pub fn instant_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().instant_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::InstantProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/plain_date.rs b/crates/oxide_builtins/src/temporal/plain_date.rs index 839ef18d..1f6c8870 100644 --- a/crates/oxide_builtins/src/temporal/plain_date.rs +++ b/crates/oxide_builtins/src/temporal/plain_date.rs @@ -1,7 +1,7 @@ //! Temporal.PlainDate:ISO 日期解析与校验、构造、getter、日历属性与加减/差值。 use chrono::{Datelike, Days, NaiveDate}; -use oxide_runtime_api::{to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -138,7 +138,7 @@ pub(crate) fn parse_iso_date(s: &str) -> Result<(i32, u32, u32), String> { /// `Temporal.PlainDate` 构造器:`new PlainDate(year, month, day)`。 pub fn plain_date_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().plain_date_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::PlainDateProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/plain_date_time.rs b/crates/oxide_builtins/src/temporal/plain_date_time.rs index fb52b5d5..e108f6f2 100644 --- a/crates/oxide_builtins/src/temporal/plain_date_time.rs +++ b/crates/oxide_builtins/src/temporal/plain_date_time.rs @@ -1,7 +1,7 @@ //! Temporal.PlainDateTime:ISO 日期时间解析、构造、getter、日历属性与加减/差值。 use chrono::{Datelike, NaiveDate}; -use oxide_runtime_api::{to_number, to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_number, to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -20,7 +20,7 @@ use super::{ /// `Temporal.PlainDateTime` 构造器:保存 ISO 日期与午夜后纳秒。 pub fn plain_date_time_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().plain_date_time_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::PlainDateTimeProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/plain_month_day.rs b/crates/oxide_builtins/src/temporal/plain_month_day.rs index 17c1b2d7..e256da78 100644 --- a/crates/oxide_builtins/src/temporal/plain_month_day.rs +++ b/crates/oxide_builtins/src/temporal/plain_month_day.rs @@ -1,6 +1,6 @@ //! Temporal.PlainMonthDay:ISO 月日解析、构造、getter 与 with/toPlainDate。 -use oxide_runtime_api::{to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -60,7 +60,7 @@ pub(crate) fn temporal_constructor_calendar_id(vm: &mut H, value: JsV /// `Temporal.PlainMonthDay` 构造器:`new PlainMonthDay(month, day[, calendar[, referenceISOYear]])`。 pub fn plain_month_day_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().plain_month_day_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::PlainMonthDayProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/plain_time.rs b/crates/oxide_builtins/src/temporal/plain_time.rs index 9e6279b3..a61d0d2a 100644 --- a/crates/oxide_builtins/src/temporal/plain_time.rs +++ b/crates/oxide_builtins/src/temporal/plain_time.rs @@ -1,6 +1,6 @@ //! Temporal.PlainTime:ISO 时间解析、构造、getter、with/until/since 与加减舍入。 -use oxide_runtime_api::{to_number, to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_number, to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -272,7 +272,7 @@ pub(crate) fn valid_plain_time(hour: u32, minute: u32, second: u32, ms: u32, us: /// `Temporal.PlainTime` 构造器:`new PlainTime(h, m, s, ms, us, ns)`,缺省为 0。 pub fn plain_time_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().plain_time_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::PlainTimeProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/plain_year_month.rs b/crates/oxide_builtins/src/temporal/plain_year_month.rs index eeee3836..44042fda 100644 --- a/crates/oxide_builtins/src/temporal/plain_year_month.rs +++ b/crates/oxide_builtins/src/temporal/plain_year_month.rs @@ -1,6 +1,6 @@ //! Temporal.PlainYearMonth:ISO 年月解析、构造、getter、日历属性与 with/加减差值。 -use oxide_runtime_api::{to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -26,7 +26,7 @@ fn plain_year_month_ymd(vm: &mut H, args: &[u8]) -> Result<(f64, f64, /// `Temporal.PlainYearMonth` 构造器:`new PlainYearMonth(year, month[, calendar[, referenceISODay]])`。 pub fn plain_year_month_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().plain_year_month_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::PlainYearMonthProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm, diff --git a/crates/oxide_builtins/src/temporal/zoned_date_time.rs b/crates/oxide_builtins/src/temporal/zoned_date_time.rs index 24a60fd2..40e0d101 100644 --- a/crates/oxide_builtins/src/temporal/zoned_date_time.rs +++ b/crates/oxide_builtins/src/temporal/zoned_date_time.rs @@ -2,7 +2,7 @@ //! with/until/since、舍入、加减与格式化。 use chrono::{Datelike, NaiveDate}; -use oxide_runtime_api::{to_number, to_string, NativeResult, VmHost}; +use oxide_runtime_api::{to_number, to_string, NativeResult, ProtoKind, VmHost}; use oxide_types::object::JsObject; use oxide_types::value::JsValue; @@ -34,7 +34,7 @@ use super::{ /// `Temporal.ZonedDateTime` 构造器:保存纪元纳秒、固定偏移或 UTC 时区以及 ISO 日历。 pub fn zoned_date_time_constructor(vm: &mut H, args: &[u8]) -> NativeResult { - let ctor_proto = vm.session().builtin_world().zoned_date_time_proto.as_ptr(); + let ctor_proto = vm.builtin_proto(ProtoKind::ZonedDateTimeProto); if !is_ctor_call(vm, args, ctor_proto) { return NativeResult::Err(crate::error::create_type_error( vm,