mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
feat: 新增 Intl 特性域骨架实现
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
//! 内置对象 id 枚举(`BuiltinId` 98 变体 + `ALL` 顺序钉表)、世代快照
|
||||
//! 内置对象 id 枚举(`BuiltinId` 119 变体 + `ALL` 顺序钉表)、世代快照
|
||||
//! (`BuiltinSnapshot`)与按家族划分的脏标记位集(`BuiltinDirtySet`);
|
||||
//! `NUM_BUILTINS` 文档承载"新增 BuiltinWorld 字段须同步"四处约束注记。
|
||||
|
||||
@@ -11,7 +11,7 @@ use crate::builtin::BuiltinWorld;
|
||||
/// 维护注意:每个新增的 `BuiltinWorld` 对象字段都必须加到这里以及
|
||||
/// `KernelSession::dirty_since_snapshot()`,以便选择性重置重建正确的
|
||||
/// builtin 家族。
|
||||
pub const NUM_BUILTINS: usize = 98;
|
||||
pub const NUM_BUILTINS: usize = 119;
|
||||
|
||||
/// 内置对象枚举 id,与 `BuiltinWorld` 中的存储槽一一对应。
|
||||
///
|
||||
@@ -118,6 +118,27 @@ pub enum BuiltinId {
|
||||
CustomEventProto = 95,
|
||||
CustomEventCtor = 96,
|
||||
EventTargetProto = 97,
|
||||
IntlObject = 98,
|
||||
NumberFormatConstructor = 99,
|
||||
NumberFormatProto = 100,
|
||||
DateTimeFormatConstructor = 101,
|
||||
DateTimeFormatProto = 102,
|
||||
CollatorConstructor = 103,
|
||||
CollatorProto = 104,
|
||||
PluralRulesConstructor = 105,
|
||||
PluralRulesProto = 106,
|
||||
ListFormatConstructor = 107,
|
||||
ListFormatProto = 108,
|
||||
RelativeTimeFormatConstructor = 109,
|
||||
RelativeTimeFormatProto = 110,
|
||||
DisplayNamesConstructor = 111,
|
||||
DisplayNamesProto = 112,
|
||||
SegmenterConstructor = 113,
|
||||
SegmenterProto = 114,
|
||||
LocaleConstructor = 115,
|
||||
LocaleProto = 116,
|
||||
DurationFormatConstructor = 117,
|
||||
DurationFormatProto = 118,
|
||||
}
|
||||
|
||||
impl BuiltinId {
|
||||
@@ -223,6 +244,27 @@ impl BuiltinId {
|
||||
BuiltinId::CustomEventProto,
|
||||
BuiltinId::CustomEventCtor,
|
||||
BuiltinId::EventTargetProto,
|
||||
BuiltinId::IntlObject,
|
||||
BuiltinId::NumberFormatConstructor,
|
||||
BuiltinId::NumberFormatProto,
|
||||
BuiltinId::DateTimeFormatConstructor,
|
||||
BuiltinId::DateTimeFormatProto,
|
||||
BuiltinId::CollatorConstructor,
|
||||
BuiltinId::CollatorProto,
|
||||
BuiltinId::PluralRulesConstructor,
|
||||
BuiltinId::PluralRulesProto,
|
||||
BuiltinId::ListFormatConstructor,
|
||||
BuiltinId::ListFormatProto,
|
||||
BuiltinId::RelativeTimeFormatConstructor,
|
||||
BuiltinId::RelativeTimeFormatProto,
|
||||
BuiltinId::DisplayNamesConstructor,
|
||||
BuiltinId::DisplayNamesProto,
|
||||
BuiltinId::SegmenterConstructor,
|
||||
BuiltinId::SegmenterProto,
|
||||
BuiltinId::LocaleConstructor,
|
||||
BuiltinId::LocaleProto,
|
||||
BuiltinId::DurationFormatConstructor,
|
||||
BuiltinId::DurationFormatProto,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -301,6 +343,7 @@ pub struct BuiltinDirtySet {
|
||||
pub message_channel: bool,
|
||||
pub broadcast_channel: bool,
|
||||
pub event: bool,
|
||||
pub intl: bool,
|
||||
}
|
||||
|
||||
impl BuiltinDirtySet {
|
||||
@@ -337,6 +380,7 @@ impl BuiltinDirtySet {
|
||||
message_channel: true,
|
||||
broadcast_channel: true,
|
||||
event: true,
|
||||
intl: true,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,6 +411,7 @@ impl BuiltinDirtySet {
|
||||
|| self.message_channel
|
||||
|| self.broadcast_channel
|
||||
|| self.event
|
||||
|| self.intl
|
||||
}
|
||||
|
||||
/// 是否存在任何污染(builtin world 或 global object)。
|
||||
@@ -379,13 +424,13 @@ impl BuiltinDirtySet {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// 槽对齐面:ALL 表与判别值 0..97 严格同序,快照数组随 NUM_BUILTINS
|
||||
/// 槽对齐面:ALL 表与判别值 0..118 严格同序,快照数组随 NUM_BUILTINS
|
||||
/// 自动扩维、逐槽对齐。
|
||||
#[test]
|
||||
fn builtin_snapshot_all_slots_aligned() {
|
||||
assert_eq!(NUM_BUILTINS, 98);
|
||||
assert_eq!(NUM_BUILTINS, 119);
|
||||
assert_eq!(BuiltinId::ALL.len(), NUM_BUILTINS);
|
||||
for i in 0..97usize {
|
||||
for i in 0..118usize {
|
||||
assert_eq!(BuiltinId::ALL[i] as usize, i);
|
||||
}
|
||||
assert_eq!(BuiltinId::ALL[81], BuiltinId::SharedArrayBufferProto);
|
||||
|
||||
@@ -209,6 +209,27 @@ impl KernelSession {
|
||||
|| gen(BuiltinId::CustomEventProto) != snap(BuiltinId::CustomEventProto)
|
||||
|| gen(BuiltinId::CustomEventCtor) != snap(BuiltinId::CustomEventCtor)
|
||||
|| gen(BuiltinId::EventTargetProto) != snap(BuiltinId::EventTargetProto),
|
||||
intl: gen(BuiltinId::IntlObject) != snap(BuiltinId::IntlObject)
|
||||
|| gen(BuiltinId::NumberFormatConstructor) != snap(BuiltinId::NumberFormatConstructor)
|
||||
|| gen(BuiltinId::NumberFormatProto) != snap(BuiltinId::NumberFormatProto)
|
||||
|| gen(BuiltinId::DateTimeFormatConstructor) != snap(BuiltinId::DateTimeFormatConstructor)
|
||||
|| gen(BuiltinId::DateTimeFormatProto) != snap(BuiltinId::DateTimeFormatProto)
|
||||
|| gen(BuiltinId::CollatorConstructor) != snap(BuiltinId::CollatorConstructor)
|
||||
|| gen(BuiltinId::CollatorProto) != snap(BuiltinId::CollatorProto)
|
||||
|| gen(BuiltinId::PluralRulesConstructor) != snap(BuiltinId::PluralRulesConstructor)
|
||||
|| gen(BuiltinId::PluralRulesProto) != snap(BuiltinId::PluralRulesProto)
|
||||
|| gen(BuiltinId::ListFormatConstructor) != snap(BuiltinId::ListFormatConstructor)
|
||||
|| gen(BuiltinId::ListFormatProto) != snap(BuiltinId::ListFormatProto)
|
||||
|| gen(BuiltinId::RelativeTimeFormatConstructor) != snap(BuiltinId::RelativeTimeFormatConstructor)
|
||||
|| gen(BuiltinId::RelativeTimeFormatProto) != snap(BuiltinId::RelativeTimeFormatProto)
|
||||
|| gen(BuiltinId::DisplayNamesConstructor) != snap(BuiltinId::DisplayNamesConstructor)
|
||||
|| gen(BuiltinId::DisplayNamesProto) != snap(BuiltinId::DisplayNamesProto)
|
||||
|| gen(BuiltinId::SegmenterConstructor) != snap(BuiltinId::SegmenterConstructor)
|
||||
|| gen(BuiltinId::SegmenterProto) != snap(BuiltinId::SegmenterProto)
|
||||
|| gen(BuiltinId::LocaleConstructor) != snap(BuiltinId::LocaleConstructor)
|
||||
|| gen(BuiltinId::LocaleProto) != snap(BuiltinId::LocaleProto)
|
||||
|| gen(BuiltinId::DurationFormatConstructor) != snap(BuiltinId::DurationFormatConstructor)
|
||||
|| gen(BuiltinId::DurationFormatProto) != snap(BuiltinId::DurationFormatProto),
|
||||
};
|
||||
// wrapper 本体被写不落在任何家族位上(写的是 wrapper 自身而非所属 P
|
||||
// 对象):收缩为全脏,强制重建全部家族与 global,使被写的可复用
|
||||
|
||||
Reference in New Issue
Block a user