refactor: 内置十四文件迁移内核访问器调用至能力方法

This commit is contained in:
2026-10-08 07:59:40 +00:00
parent 5970f804d7
commit 47912535d5
16 changed files with 47 additions and 48 deletions
Generated
+19 -19
View File
@@ -1160,7 +1160,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_builtins" name = "oxide_builtins"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"chrono", "chrono",
"fast-float", "fast-float",
@@ -1185,7 +1185,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_bytecode" name = "oxide_bytecode"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"oxide_log", "oxide_log",
@@ -1193,7 +1193,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_cfg" name = "oxide_cfg"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_emit", "oxide_emit",
@@ -1204,7 +1204,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_cli" name = "oxide_cli"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"bumpalo", "bumpalo",
@@ -1226,7 +1226,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_code_cache" name = "oxide_code_cache"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"lru", "lru",
"oxide_bytecode", "oxide_bytecode",
@@ -1235,7 +1235,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_compiler" name = "oxide_compiler"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1255,7 +1255,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_dce" name = "oxide_dce"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1269,7 +1269,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_emit" name = "oxide_emit"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"oxc_allocator", "oxc_allocator",
@@ -1284,7 +1284,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_engine" name = "oxide_engine"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_compiler", "oxide_compiler",
@@ -1296,7 +1296,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_ir" name = "oxide_ir"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_log", "oxide_log",
@@ -1305,7 +1305,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_kernel" name = "oxide_kernel"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"dashmap", "dashmap",
@@ -1319,7 +1319,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_liveness" name = "oxide_liveness"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1331,7 +1331,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_log" name = "oxide_log"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"tracing", "tracing",
"tracing-appender", "tracing-appender",
@@ -1340,7 +1340,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_parser" name = "oxide_parser"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxc_allocator", "oxc_allocator",
"oxc_ast", "oxc_ast",
@@ -1355,7 +1355,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_regalloc" name = "oxide_regalloc"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1371,7 +1371,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_runtime_api" name = "oxide_runtime_api"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"num-traits", "num-traits",
@@ -1384,7 +1384,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_test262" name = "oxide_test262"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_compiler", "oxide_compiler",
@@ -1402,7 +1402,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_types" name = "oxide_types"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"dashmap", "dashmap",
@@ -1415,7 +1415,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_vm" name = "oxide_vm"
version = "0.8.75" version = "0.8.76"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"chrono", "chrono",
+1 -1
View File
@@ -23,7 +23,7 @@ members = [
] ]
[workspace.package] [workspace.package]
version = "0.8.75" version = "0.8.76"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
rust-version = "1.80" rust-version = "1.80"
+2 -2
View File
@@ -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, get_typed_array_data, read_element, ta_element_value, ta_to_integer_or_infinity, ta_validate, write_element,
TypedArrayData, TypedArrayData,
}; };
use oxide_runtime_api::{NativeResult, VmHost}; use oxide_runtime_api::{NativeResult, ProtoKind, VmHost};
macro_rules! native_try { macro_rules! native_try {
($expr:expr) => { ($expr:expr) => {
@@ -369,7 +369,7 @@ pub fn atomics_is_lock_free<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult
/// waitAsync 结果对象:普通对象(proto = Object.prototype),own 属性 /// waitAsync 结果对象:普通对象(proto = Object.prototype),own 属性
/// async/value 双 data 属性(普通创建路径默认形)。 /// async/value 双 data 属性(普通创建路径默认形)。
fn wait_async_result_object<H: VmHost>(vm: &mut H, async_arm: bool, value: JsValue) -> JsValue { fn wait_async_result_object<H: VmHost>(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))); let obj_ptr = vm.alloc_object(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(object_proto)));
// SAFETY: alloc_object 返回存活 arena 指针,借出期间无别名。 // SAFETY: alloc_object 返回存活 arena 指针,借出期间无别名。
let obj = unsafe { &mut *obj_ptr }; let obj = unsafe { &mut *obj_ptr };
+2 -3
View File
@@ -1,5 +1,5 @@
use num_bigint::BigInt; 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; use oxide_types::value::JsValue;
/// JS `BigInt(value)` 构造逻辑(§21.2.1.1): /// JS `BigInt(value)` 构造逻辑(§21.2.1.1):
@@ -184,8 +184,7 @@ fn this_bigint_value<H: VmHost>(vm: &mut H, this_val: JsValue) -> Result<JsValue
let obj = unsafe { &*ptr }; let obj = unsafe { &*ptr };
if obj.proto().is_object() { if obj.proto().is_object() {
let proto_ptr = obj.proto().as_js_object_ptr(); let proto_ptr = obj.proto().as_js_object_ptr();
let bigint_proto = let bigint_proto = vm.builtin_proto(ProtoKind::BigIntProto);
vm.session().builtin_world().bigint_proto.as_ptr() as *mut oxide_types::object::JsObject;
if !proto_ptr.is_null() && std::ptr::eq(proto_ptr, bigint_proto) { if !proto_ptr.is_null() && std::ptr::eq(proto_ptr, bigint_proto) {
let v = obj.boxed_value(); let v = obj.boxed_value();
if v.is_bigint() { if v.is_bigint() {
+2 -2
View File
@@ -2,7 +2,7 @@ use num_traits::Zero;
use oxide_types::object::JsObject; use oxide_types::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
use oxide_runtime_api::{NativeResult, VmHost}; use oxide_runtime_api::{NativeResult, ProtoKind, VmHost};
/// JS `Boolean()` 构造逻辑:把参数按 ToBoolean 语义转换。 /// JS `Boolean()` 构造逻辑:把参数按 ToBoolean 语义转换。
/// 以普通函数调用时返回原始 bool;以 new 语义调用时返回 `[[BooleanData]]` 为结果的包装对象。 /// 以普通函数调用时返回原始 bool;以 new 语义调用时返回 `[[BooleanData]]` 为结果的包装对象。
@@ -38,7 +38,7 @@ pub fn boolean_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
false 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 is_ctor = if this_val.is_object() {
let ptr = this_val.as_js_object_ptr(); let ptr = this_val.as_js_object_ptr();
if ptr.is_null() { if ptr.is_null() {
+1 -1
View File
@@ -38,7 +38,7 @@ pub fn eval<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
let code = oxide_kernel::string_forge::source_escape(&units); let code = oxide_kernel::string_forge::source_escape(&units);
match vm.create_dynamic_script(&code) { match vm.create_dynamic_script(&code) {
Ok(func) => { 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, &[]) { match vm.call_function_sync(func, global, &[]) {
Ok(val) => NativeResult::Ok(val), Ok(val) => NativeResult::Ok(val),
Err(e) => { Err(e) => {
+2 -2
View File
@@ -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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -114,7 +114,7 @@ pub fn string_value_of<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
/// JS `String()` 构造逻辑:把参数转成字符串(单元保真);new 语义返回 /// JS `String()` 构造逻辑:把参数转成字符串(单元保真);new 语义返回
/// `[[StringData]]` 包装对象。 /// `[[StringData]]` 包装对象。
pub fn string_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn string_constructor<H: VmHost>(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 this_val = vm.reg(if args.is_empty() { 0 } else { args[0] });
let is_ctor = if this_val.is_object() { let is_ctor = if this_val.is_object() {
let ptr = this_val.as_js_object_ptr(); let ptr = this_val.as_js_object_ptr();
+2 -2
View File
@@ -4,7 +4,7 @@ use oxide_kernel::shape_forge::EMPTY_SHAPE_ID;
use oxide_types::object::JsObject; use oxide_types::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
use oxide_runtime_api::VmHost; use oxide_runtime_api::{ProtoKind, VmHost};
macro_rules! try_string { macro_rules! try_string {
($e:expr) => { ($e:expr) => {
@@ -398,7 +398,7 @@ pub(crate) fn split_limit_to_uint32<H: VmHost>(vm: &mut H, limit_val: JsValue) -
/// 以已构造的字符串值构建字符串数组(元素零拷贝落地),供逐单元产出路径 /// 以已构造的字符串值构建字符串数组(元素零拷贝落地),供逐单元产出路径
/// (空分隔 split)复用,跳过 `Vec<String>` 中间层。 /// (空分隔 split)复用,跳过 `Vec<String>` 中间层。
pub(crate) fn make_string_array_values<H: VmHost>(vm: &mut H, parts: Vec<JsValue>) -> JsValue { pub(crate) fn make_string_array_values<H: VmHost>(vm: &mut H, parts: Vec<JsValue>) -> 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 n = parts.len();
let arr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto), n)); let arr = vm.alloc_object(JsObject::new_array(EMPTY_SHAPE_ID, JsValue::from_js_object(proto), n));
unsafe { unsafe {
@@ -1,7 +1,7 @@
//! Temporal.Duration:ISO 字符串与 property bag 解析、构造、getter、total/round、 //! 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -265,7 +265,7 @@ pub(crate) fn duration_like_values<H: VmHost>(vm: &mut H, val: JsValue) -> Resul
/// `Temporal.Duration` 构造器,保存十个整数时长分量。 /// `Temporal.Duration` 构造器,保存十个整数时长分量。
pub fn duration_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn duration_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -2,7 +2,7 @@
use chrono::Utc; use chrono::Utc;
use num_traits::ToPrimitive; 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -300,7 +300,7 @@ pub fn now_time_zone_id<H: VmHost>(vm: &mut H, _args: &[u8]) -> NativeResult {
/// `Temporal.Instant` 构造器:把参数按 ToBigInt 转换为纪元纳秒。 /// `Temporal.Instant` 构造器:把参数按 ToBigInt 转换为纪元纳秒。
pub fn instant_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn instant_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -1,7 +1,7 @@
//! Temporal.PlainDate:ISO 日期解析与校验、构造、getter、日历属性与加减/差值。 //! Temporal.PlainDate:ISO 日期解析与校验、构造、getter、日历属性与加减/差值。
use chrono::{Datelike, Days, NaiveDate}; 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::object::JsObject;
use oxide_types::value::JsValue; 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)`。 /// `Temporal.PlainDate` 构造器:`new PlainDate(year, month, day)`。
pub fn plain_date_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn plain_date_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -1,7 +1,7 @@
//! Temporal.PlainDateTime:ISO 日期时间解析、构造、getter、日历属性与加减/差值。 //! Temporal.PlainDateTime:ISO 日期时间解析、构造、getter、日历属性与加减/差值。
use chrono::{Datelike, NaiveDate}; 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -20,7 +20,7 @@ use super::{
/// `Temporal.PlainDateTime` 构造器:保存 ISO 日期与午夜后纳秒。 /// `Temporal.PlainDateTime` 构造器:保存 ISO 日期与午夜后纳秒。
pub fn plain_date_time_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn plain_date_time_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -1,6 +1,6 @@
//! Temporal.PlainMonthDay:ISO 月日解析、构造、getter 与 with/toPlainDate。 //! 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -60,7 +60,7 @@ pub(crate) fn temporal_constructor_calendar_id<H: VmHost>(vm: &mut H, value: JsV
/// `Temporal.PlainMonthDay` 构造器:`new PlainMonthDay(month, day[, calendar[, referenceISOYear]])`。 /// `Temporal.PlainMonthDay` 构造器:`new PlainMonthDay(month, day[, calendar[, referenceISOYear]])`。
pub fn plain_month_day_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn plain_month_day_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -1,6 +1,6 @@
//! Temporal.PlainTime:ISO 时间解析、构造、getter、with/until/since 与加减舍入。 //! 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::object::JsObject;
use oxide_types::value::JsValue; 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。 /// `Temporal.PlainTime` 构造器:`new PlainTime(h, m, s, ms, us, ns)`,缺省为 0。
pub fn plain_time_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn plain_time_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -1,6 +1,6 @@
//! Temporal.PlainYearMonth:ISO 年月解析、构造、getter、日历属性与 with/加减差值。 //! 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -26,7 +26,7 @@ fn plain_year_month_ymd<H: VmHost>(vm: &mut H, args: &[u8]) -> Result<(f64, f64,
/// `Temporal.PlainYearMonth` 构造器:`new PlainYearMonth(year, month[, calendar[, referenceISODay]])`。 /// `Temporal.PlainYearMonth` 构造器:`new PlainYearMonth(year, month[, calendar[, referenceISODay]])`。
pub fn plain_year_month_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn plain_year_month_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,
@@ -2,7 +2,7 @@
//! with/until/since、舍入、加减与格式化。 //! with/until/since、舍入、加减与格式化。
use chrono::{Datelike, NaiveDate}; 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::object::JsObject;
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
@@ -34,7 +34,7 @@ use super::{
/// `Temporal.ZonedDateTime` 构造器:保存纪元纳秒、固定偏移或 UTC 时区以及 ISO 日历。 /// `Temporal.ZonedDateTime` 构造器:保存纪元纳秒、固定偏移或 UTC 时区以及 ISO 日历。
pub fn zoned_date_time_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult { pub fn zoned_date_time_constructor<H: VmHost>(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) { if !is_ctor_call(vm, args, ctor_proto) {
return NativeResult::Err(crate::error::create_type_error( return NativeResult::Err(crate::error::create_type_error(
vm, vm,