refactor: 删 BuiltinWorld 十三个 well-known symbol 空对象字段

This commit is contained in:
2026-10-05 18:50:31 +00:00
parent 3330c0fb8c
commit 3ceadcf8c9
7 changed files with 67 additions and 235 deletions
Generated
+18 -18
View File
@@ -1095,7 +1095,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_builtins" name = "oxide_builtins"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"chrono", "chrono",
"fast-float", "fast-float",
@@ -1120,7 +1120,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_bytecode" name = "oxide_bytecode"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"oxide_log", "oxide_log",
@@ -1128,7 +1128,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_cfg" name = "oxide_cfg"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_emit", "oxide_emit",
@@ -1139,7 +1139,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_cli" name = "oxide_cli"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"bumpalo", "bumpalo",
@@ -1159,7 +1159,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_code_cache" name = "oxide_code_cache"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"lru", "lru",
"oxide_bytecode", "oxide_bytecode",
@@ -1168,7 +1168,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_compiler" name = "oxide_compiler"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1187,7 +1187,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_dce" name = "oxide_dce"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1201,7 +1201,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_emit" name = "oxide_emit"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"oxc_allocator", "oxc_allocator",
@@ -1216,7 +1216,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_ir" name = "oxide_ir"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_log", "oxide_log",
@@ -1225,7 +1225,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_kernel" name = "oxide_kernel"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"dashmap", "dashmap",
@@ -1240,7 +1240,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_liveness" name = "oxide_liveness"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1252,7 +1252,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_log" name = "oxide_log"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"tracing", "tracing",
"tracing-appender", "tracing-appender",
@@ -1261,7 +1261,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_parser" name = "oxide_parser"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxc_allocator", "oxc_allocator",
"oxc_ast", "oxc_ast",
@@ -1276,7 +1276,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_regalloc" name = "oxide_regalloc"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_cfg", "oxide_cfg",
@@ -1292,7 +1292,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_runtime_api" name = "oxide_runtime_api"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"num-traits", "num-traits",
@@ -1304,7 +1304,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_test262" name = "oxide_test262"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"oxide_bytecode", "oxide_bytecode",
"oxide_compiler", "oxide_compiler",
@@ -1321,7 +1321,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_types" name = "oxide_types"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"hashbrown 0.14.5", "hashbrown 0.14.5",
@@ -1333,7 +1333,7 @@ dependencies = [
[[package]] [[package]]
name = "oxide_vm" name = "oxide_vm"
version = "0.8.12" version = "0.8.13"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"chrono", "chrono",
+1 -1
View File
@@ -22,7 +22,7 @@ members = [
] ]
[workspace.package] [workspace.package]
version = "0.8.12" version = "0.8.13"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
rust-version = "1.80" rust-version = "1.80"
+2 -28
View File
@@ -475,8 +475,8 @@ pub(crate) fn wire_builtin_world_links(world: &BuiltinWorld) {
} }
impl BuiltinWorld { impl BuiltinWorld {
/// 全量构造一个全新的 builtin world:创建所有原型/构造器对、Error 子类型、 /// 全量构造一个全新的 builtin world:创建所有原型/构造器对、Error 子类型
/// TypedArray 家族与 well-known symbol 对象,并建立原型链链接。 /// 与 TypedArray 家族,并建立原型链链接。
pub fn new(string_forge: &PermInterner, shape_forge: &ShapeForge) -> Self { pub fn new(string_forge: &PermInterner, shape_forge: &ShapeForge) -> Self {
let labels = builtin_labels(string_forge); let labels = builtin_labels(string_forge);
@@ -513,19 +513,6 @@ impl BuiltinWorld {
let (data_view_proto, data_view_constructor) = make_named_pair(string_forge, shape_forge, labels, "DataView"); let (data_view_proto, data_view_constructor) = make_named_pair(string_forge, shape_forge, labels, "DataView");
let typed_arrays = make_typed_array_family(string_forge, shape_forge, labels, &object_proto); let typed_arrays = make_typed_array_family(string_forge, shape_forge, labels, &object_proto);
let sym_match = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_replace = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_search = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_split = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_iterator = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_to_primitive = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_has_instance = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_match_all = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_async_iterator = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_to_string_tag = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_species = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_async_dispose = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_dispose = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let temporal_object = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())); let temporal_object = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let temporal_now_object = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())); let temporal_now_object = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let (instant_proto, instant_constructor) = make_named_pair(string_forge, shape_forge, labels, "Instant"); let (instant_proto, instant_constructor) = make_named_pair(string_forge, shape_forge, labels, "Instant");
@@ -630,19 +617,6 @@ impl BuiltinWorld {
bigint64array_proto: typed_arrays.bigint64array_proto, bigint64array_proto: typed_arrays.bigint64array_proto,
biguint64array_constructor: typed_arrays.biguint64array_constructor, biguint64array_constructor: typed_arrays.biguint64array_constructor,
biguint64array_proto: typed_arrays.biguint64array_proto, biguint64array_proto: typed_arrays.biguint64array_proto,
sym_match,
sym_replace,
sym_search,
sym_split,
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
sym_async_iterator,
sym_to_string_tag,
sym_species,
sym_async_dispose,
sym_dispose,
temporal_object, temporal_object,
temporal_now_object, temporal_now_object,
instant_constructor, instant_constructor,
+3 -65
View File
@@ -223,59 +223,10 @@ impl BuiltinWorld {
}, },
) )
}; };
let ( let (symbol_proto, symbol_constructor) = if dirty.symbol_family {
symbol_proto, make_named_pair(string_forge, shape_forge, labels, "Symbol")
symbol_constructor,
sym_match,
sym_replace,
sym_search,
sym_split,
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
sym_async_iterator,
sym_to_string_tag,
sym_species,
sym_async_dispose,
sym_dispose,
) = if dirty.symbol_family {
let (symbol_proto, symbol_constructor) = make_named_pair(string_forge, shape_forge, labels, "Symbol");
(
symbol_proto,
symbol_constructor,
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
)
} else { } else {
( (current.symbol_proto.clone(), current.symbol_constructor.clone())
current.symbol_proto.clone(),
current.symbol_constructor.clone(),
current.sym_match.clone(),
current.sym_replace.clone(),
current.sym_search.clone(),
current.sym_split.clone(),
current.sym_iterator.clone(),
current.sym_to_primitive.clone(),
current.sym_has_instance.clone(),
current.sym_match_all.clone(),
current.sym_async_iterator.clone(),
current.sym_to_string_tag.clone(),
current.sym_species.clone(),
current.sym_async_dispose.clone(),
current.sym_dispose.clone(),
)
}; };
let math_object = if dirty.math { let math_object = if dirty.math {
@@ -564,19 +515,6 @@ impl BuiltinWorld {
bigint64array_proto: typed_arrays.bigint64array_proto, bigint64array_proto: typed_arrays.bigint64array_proto,
biguint64array_constructor: typed_arrays.biguint64array_constructor, biguint64array_constructor: typed_arrays.biguint64array_constructor,
biguint64array_proto: typed_arrays.biguint64array_proto, biguint64array_proto: typed_arrays.biguint64array_proto,
sym_match,
sym_replace,
sym_search,
sym_split,
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
sym_async_iterator,
sym_to_string_tag,
sym_species,
sym_async_dispose,
sym_dispose,
temporal_object, temporal_object,
temporal_now_object, temporal_now_object,
instant_constructor, instant_constructor,
+4 -43
View File
@@ -1,5 +1,5 @@
//! 注册表职责:BuiltinWorld 结构(106 固定 P 字段 + stub 族 + Box::into_raw //! 注册表职责:BuiltinWorld 结构(95 固定 P 字段 + stub 族 + Box::into_raw
//! 登记表)、get_by_id 派发、all_p_fields 104 元组枚举(新增 P 字段四处同步 //! 登记表)、get_by_id 派发、all_p_fields 95 元组枚举(新增 P 字段四处同步
//! 约束载体)与登记表 track/find/inherit/teardown。 //! 约束载体)与登记表 track/find/inherit/teardown。
use oxide_types::mem::P; use oxide_types::mem::P;
@@ -8,7 +8,7 @@ use oxide_types::value::JsValue;
use crate::kernel::BuiltinId; use crate::kernel::BuiltinId;
/// 全部内置对象(原型、构造器、全局单例 Math/JSON、well-known symbol 与 stub 对象)的持有者。 /// 全部内置对象(原型、构造器、全局单例 Math/JSON 与 stub 对象)的持有者。
/// ///
/// 每个 session 独立持有自己的 `BuiltinWorld`,保证 session 间内置对象隔离; /// 每个 session 独立持有自己的 `BuiltinWorld`,保证 session 间内置对象隔离;
/// 由 [`BuiltinWorld::new`] 全量构造,或 [`BuiltinWorld::rebuild_with_dirty`] 按脏标记部分重建。 /// 由 [`BuiltinWorld::new`] 全量构造,或 [`BuiltinWorld::rebuild_with_dirty`] 按脏标记部分重建。
@@ -81,19 +81,6 @@ pub struct BuiltinWorld {
pub bigint64array_proto: P<JsObject>, pub bigint64array_proto: P<JsObject>,
pub biguint64array_constructor: P<JsObject>, pub biguint64array_constructor: P<JsObject>,
pub biguint64array_proto: P<JsObject>, pub biguint64array_proto: P<JsObject>,
pub sym_match: P<JsObject>,
pub sym_replace: P<JsObject>,
pub sym_search: P<JsObject>,
pub sym_split: P<JsObject>,
pub sym_iterator: P<JsObject>,
pub sym_to_primitive: P<JsObject>,
pub sym_has_instance: P<JsObject>,
pub sym_match_all: P<JsObject>,
pub sym_async_iterator: P<JsObject>,
pub sym_to_string_tag: P<JsObject>,
pub sym_species: P<JsObject>,
pub sym_async_dispose: P<JsObject>,
pub sym_dispose: P<JsObject>,
pub temporal_object: P<JsObject>, pub temporal_object: P<JsObject>,
pub temporal_now_object: P<JsObject>, pub temporal_now_object: P<JsObject>,
pub instant_constructor: P<JsObject>, pub instant_constructor: P<JsObject>,
@@ -381,7 +368,7 @@ impl BuiltinWorld {
/// session 收尾(`teardown_heap_data`)与选择性重建收尾(`retire_replaced`) /// session 收尾(`teardown_heap_data`)与选择性重建收尾(`retire_replaced`)
/// 的 P 字段枚举唯一入口:`BuiltinWorld` 新增 P 字段须在此同步补一行,否则 /// 的 P 字段枚举唯一入口:`BuiltinWorld` 新增 P 字段须在此同步补一行,否则
/// 收尾时该字段属性区无法释放、重建原型槽改写/释放漏掉该字段。 /// 收尾时该字段属性区无法释放、重建原型槽改写/释放漏掉该字段。
pub(crate) fn all_p_fields(&self) -> [&P<JsObject>; 108] { pub(crate) fn all_p_fields(&self) -> [&P<JsObject>; 95] {
[ [
&self.object_proto, &self.object_proto,
&self.array_proto, &self.array_proto,
@@ -447,19 +434,6 @@ impl BuiltinWorld {
&self.bigint64array_proto, &self.bigint64array_proto,
&self.biguint64array_constructor, &self.biguint64array_constructor,
&self.biguint64array_proto, &self.biguint64array_proto,
&self.sym_match,
&self.sym_replace,
&self.sym_search,
&self.sym_split,
&self.sym_iterator,
&self.sym_to_primitive,
&self.sym_has_instance,
&self.sym_match_all,
&self.sym_async_iterator,
&self.sym_to_string_tag,
&self.sym_species,
&self.sym_async_dispose,
&self.sym_dispose,
&self.temporal_object, &self.temporal_object,
&self.temporal_now_object, &self.temporal_now_object,
&self.instant_constructor, &self.instant_constructor,
@@ -602,19 +576,6 @@ impl BuiltinWorld {
BuiltinId::BigInt64ArrayProto => &self.bigint64array_proto, BuiltinId::BigInt64ArrayProto => &self.bigint64array_proto,
BuiltinId::BigUint64ArrayConstructor => &self.biguint64array_constructor, BuiltinId::BigUint64ArrayConstructor => &self.biguint64array_constructor,
BuiltinId::BigUint64ArrayProto => &self.biguint64array_proto, BuiltinId::BigUint64ArrayProto => &self.biguint64array_proto,
BuiltinId::SymMatch => &self.sym_match,
BuiltinId::SymReplace => &self.sym_replace,
BuiltinId::SymSearch => &self.sym_search,
BuiltinId::SymSplit => &self.sym_split,
BuiltinId::SymIterator => &self.sym_iterator,
BuiltinId::SymToPrimitive => &self.sym_to_primitive,
BuiltinId::SymHasInstance => &self.sym_has_instance,
BuiltinId::SymMatchAll => &self.sym_match_all,
BuiltinId::SymAsyncIterator => &self.sym_async_iterator,
BuiltinId::SymToStringTag => &self.sym_to_string_tag,
BuiltinId::SymSpecies => &self.sym_species,
BuiltinId::SymAsyncDispose => &self.sym_async_dispose,
BuiltinId::SymDispose => &self.sym_dispose,
BuiltinId::TemporalObject => &self.temporal_object, BuiltinId::TemporalObject => &self.temporal_object,
BuiltinId::TemporalNowObject => &self.temporal_now_object, BuiltinId::TemporalNowObject => &self.temporal_now_object,
BuiltinId::InstantConstructor => &self.instant_constructor, BuiltinId::InstantConstructor => &self.instant_constructor,
+38 -66
View File
@@ -1,4 +1,4 @@
//! 内置对象 id 枚举(`BuiltinId` 98 变体 + `ALL` 顺序钉表)、世代快照 //! 内置对象 id 枚举(`BuiltinId` 85 变体 + `ALL` 顺序钉表)、世代快照
//! (`BuiltinSnapshot`)与按家族划分的脏标记位集(`BuiltinDirtySet`); //! (`BuiltinSnapshot`)与按家族划分的脏标记位集(`BuiltinDirtySet`);
//! `NUM_BUILTINS` 文档承载"新增 BuiltinWorld 字段须同步"四处约束注记。 //! `NUM_BUILTINS` 文档承载"新增 BuiltinWorld 字段须同步"四处约束注记。
@@ -11,13 +11,12 @@ use crate::builtin::BuiltinWorld;
/// 维护注意:每个新增的 `BuiltinWorld` 对象字段都必须加到这里以及 /// 维护注意:每个新增的 `BuiltinWorld` 对象字段都必须加到这里以及
/// `KernelSession::dirty_since_snapshot()`,以便选择性重置重建正确的 /// `KernelSession::dirty_since_snapshot()`,以便选择性重置重建正确的
/// builtin 家族。 /// builtin 家族。
pub const NUM_BUILTINS: usize = 98; pub const NUM_BUILTINS: usize = 85;
/// 内置对象枚举 id,与 `BuiltinWorld` 中的存储槽一一对应。 /// 内置对象枚举 id,与 `BuiltinWorld` 中的存储槽一一对应。
/// ///
/// 覆盖各构造器/原型、Error 家族(含 SuppressedError 原型)、集合类型、 /// 覆盖各构造器/原型、Error 家族(含 SuppressedError 原型)、集合类型与
/// TypedArray 家族与 well-known symbols;`repr(u8)` 使其可直接作为数组下标 /// TypedArray 家族;`repr(u8)` 使其可直接作为数组下标(`u8` 值即下标)。
/// (`u8` 值即下标)。
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)] #[repr(u8)]
pub enum BuiltinId { pub enum BuiltinId {
@@ -80,45 +79,32 @@ pub enum BuiltinId {
BigInt64ArrayProto = 56, BigInt64ArrayProto = 56,
BigUint64ArrayConstructor = 57, BigUint64ArrayConstructor = 57,
BigUint64ArrayProto = 58, BigUint64ArrayProto = 58,
SymMatch = 59, TemporalObject = 59,
SymReplace = 60, TemporalNowObject = 60,
SymSearch = 61, InstantConstructor = 61,
SymSplit = 62, InstantProto = 62,
SymIterator = 63, PlainDateConstructor = 63,
SymToPrimitive = 64, PlainDateProto = 64,
SymHasInstance = 65, PlainTimeConstructor = 65,
SymMatchAll = 66, PlainTimeProto = 66,
SymAsyncIterator = 67, BigIntConstructor = 67,
TemporalObject = 68, BigIntProto = 68,
TemporalNowObject = 69, DurationConstructor = 69,
InstantConstructor = 70, DurationProto = 70,
InstantProto = 71, ZonedDateTimeConstructor = 71,
PlainDateConstructor = 72, ZonedDateTimeProto = 72,
PlainDateProto = 73, PlainDateTimeConstructor = 73,
PlainTimeConstructor = 74, PlainDateTimeProto = 74,
PlainTimeProto = 75, SuppressedErrorProto = 75,
BigIntConstructor = 76, Console = 76,
BigIntProto = 77, PlainMonthDayConstructor = 77,
DurationConstructor = 78, PlainMonthDayProto = 78,
DurationProto = 79, PlainYearMonthConstructor = 79,
SymToStringTag = 80, PlainYearMonthProto = 80,
SymSpecies = 85, SharedArrayBufferProto = 81,
ZonedDateTimeConstructor = 81, SharedArrayBufferConstructor = 82,
ZonedDateTimeProto = 82, AtomicsObject = 83,
PlainDateTimeConstructor = 83, AsyncIteratorProto = 84,
PlainDateTimeProto = 84,
SymAsyncDispose = 86,
SymDispose = 87,
SuppressedErrorProto = 88,
Console = 89,
PlainMonthDayConstructor = 90,
PlainMonthDayProto = 91,
PlainYearMonthConstructor = 92,
PlainYearMonthProto = 93,
SharedArrayBufferProto = 94,
SharedArrayBufferConstructor = 95,
AtomicsObject = 96,
AsyncIteratorProto = 97,
} }
impl BuiltinId { impl BuiltinId {
@@ -185,15 +171,6 @@ impl BuiltinId {
BuiltinId::BigInt64ArrayProto, BuiltinId::BigInt64ArrayProto,
BuiltinId::BigUint64ArrayConstructor, BuiltinId::BigUint64ArrayConstructor,
BuiltinId::BigUint64ArrayProto, BuiltinId::BigUint64ArrayProto,
BuiltinId::SymMatch,
BuiltinId::SymReplace,
BuiltinId::SymSearch,
BuiltinId::SymSplit,
BuiltinId::SymIterator,
BuiltinId::SymToPrimitive,
BuiltinId::SymHasInstance,
BuiltinId::SymMatchAll,
BuiltinId::SymAsyncIterator,
BuiltinId::TemporalObject, BuiltinId::TemporalObject,
BuiltinId::TemporalNowObject, BuiltinId::TemporalNowObject,
BuiltinId::InstantConstructor, BuiltinId::InstantConstructor,
@@ -206,14 +183,10 @@ impl BuiltinId {
BuiltinId::BigIntProto, BuiltinId::BigIntProto,
BuiltinId::DurationConstructor, BuiltinId::DurationConstructor,
BuiltinId::DurationProto, BuiltinId::DurationProto,
BuiltinId::SymToStringTag,
BuiltinId::ZonedDateTimeConstructor, BuiltinId::ZonedDateTimeConstructor,
BuiltinId::ZonedDateTimeProto, BuiltinId::ZonedDateTimeProto,
BuiltinId::PlainDateTimeConstructor, BuiltinId::PlainDateTimeConstructor,
BuiltinId::PlainDateTimeProto, BuiltinId::PlainDateTimeProto,
BuiltinId::SymSpecies,
BuiltinId::SymAsyncDispose,
BuiltinId::SymDispose,
BuiltinId::SuppressedErrorProto, BuiltinId::SuppressedErrorProto,
BuiltinId::Console, BuiltinId::Console,
BuiltinId::PlainMonthDayConstructor, BuiltinId::PlainMonthDayConstructor,
@@ -371,20 +344,19 @@ impl BuiltinDirtySet {
mod tests { mod tests {
use super::*; use super::*;
/// 槽对齐面:表尾追加 AsyncIteratorPrototype 后总槽数 98,既有 97 个 /// 槽对齐面:ALL 表与判别值 0..84 严格同序,快照数组随 NUM_BUILTINS
/// 判别值零位移,快照数组随 NUM_BUILTINS 自动扩维、逐槽对齐。 /// 自动扩维、逐槽对齐。
#[test] #[test]
fn builtin_snapshot_all_slots_aligned() { fn builtin_snapshot_all_slots_aligned() {
assert_eq!(NUM_BUILTINS, 98); assert_eq!(NUM_BUILTINS, 85);
assert_eq!(BuiltinId::ALL.len(), NUM_BUILTINS); assert_eq!(BuiltinId::ALL.len(), NUM_BUILTINS);
// 前 97 项判别值 0-96 逐项不变(尾追加零位移)。 for i in 0..84usize {
for i in 0..97usize {
assert_eq!(BuiltinId::ALL[i] as usize, i); assert_eq!(BuiltinId::ALL[i] as usize, i);
} }
assert_eq!(BuiltinId::ALL[94], BuiltinId::SharedArrayBufferProto); assert_eq!(BuiltinId::ALL[81], BuiltinId::SharedArrayBufferProto);
assert_eq!(BuiltinId::ALL[95], BuiltinId::SharedArrayBufferConstructor); assert_eq!(BuiltinId::ALL[82], BuiltinId::SharedArrayBufferConstructor);
assert_eq!(BuiltinId::ALL[96], BuiltinId::AtomicsObject); assert_eq!(BuiltinId::ALL[83], BuiltinId::AtomicsObject);
assert_eq!(BuiltinId::ALL[97], BuiltinId::AsyncIteratorProto); assert_eq!(BuiltinId::ALL[84], BuiltinId::AsyncIteratorProto);
// 快照经 session 全量构造路径采集,generations 数组维度 = 槽数。 // 快照经 session 全量构造路径采集,generations 数组维度 = 槽数。
use crate::kernel::{KernelConfig, KernelCore, KernelSession}; use crate::kernel::{KernelConfig, KernelCore, KernelSession};
+1 -14
View File
@@ -131,20 +131,7 @@ impl KernelSession {
|| gen(BuiltinId::EvalErrorProto) != snap(BuiltinId::EvalErrorProto) || gen(BuiltinId::EvalErrorProto) != snap(BuiltinId::EvalErrorProto)
|| gen(BuiltinId::SuppressedErrorProto) != snap(BuiltinId::SuppressedErrorProto), || gen(BuiltinId::SuppressedErrorProto) != snap(BuiltinId::SuppressedErrorProto),
symbol_family: gen(BuiltinId::SymbolProto) != snap(BuiltinId::SymbolProto) symbol_family: gen(BuiltinId::SymbolProto) != snap(BuiltinId::SymbolProto)
|| gen(BuiltinId::SymbolConstructor) != snap(BuiltinId::SymbolConstructor) || gen(BuiltinId::SymbolConstructor) != snap(BuiltinId::SymbolConstructor),
|| gen(BuiltinId::SymMatch) != snap(BuiltinId::SymMatch)
|| gen(BuiltinId::SymReplace) != snap(BuiltinId::SymReplace)
|| gen(BuiltinId::SymSearch) != snap(BuiltinId::SymSearch)
|| gen(BuiltinId::SymSplit) != snap(BuiltinId::SymSplit)
|| gen(BuiltinId::SymIterator) != snap(BuiltinId::SymIterator)
|| gen(BuiltinId::SymToPrimitive) != snap(BuiltinId::SymToPrimitive)
|| gen(BuiltinId::SymHasInstance) != snap(BuiltinId::SymHasInstance)
|| gen(BuiltinId::SymMatchAll) != snap(BuiltinId::SymMatchAll)
|| gen(BuiltinId::SymAsyncIterator) != snap(BuiltinId::SymAsyncIterator)
|| gen(BuiltinId::SymToStringTag) != snap(BuiltinId::SymToStringTag)
|| gen(BuiltinId::SymSpecies) != snap(BuiltinId::SymSpecies)
|| gen(BuiltinId::SymAsyncDispose) != snap(BuiltinId::SymAsyncDispose)
|| gen(BuiltinId::SymDispose) != snap(BuiltinId::SymDispose),
math: gen(BuiltinId::MathObject) != snap(BuiltinId::MathObject), math: gen(BuiltinId::MathObject) != snap(BuiltinId::MathObject),
json: gen(BuiltinId::JsonObject) != snap(BuiltinId::JsonObject), json: gen(BuiltinId::JsonObject) != snap(BuiltinId::JsonObject),
date: gen(BuiltinId::DateConstructor) != snap(BuiltinId::DateConstructor) date: gen(BuiltinId::DateConstructor) != snap(BuiltinId::DateConstructor)