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