mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
emit/kernel: 可写 builtin 全局标识符写双写全局属性,三常量描述符对齐规范 c:false,受限词法名集补 eval
- 谓词注册表化:targets_readonly_builtin 解析条件抽公共助手,新增 targets_writable_builtin / is_writable_builtin_global(BUILTIN_GLOBALS 减只读三常量派生,不复制名单)+ 只读/可写划分漂移守卫单测 - 12 个赋值族写点(简单/复合/更新/逻辑赋值、解构两臂、for-in/for-of 标识符目标)补双写臂:STORE_VAR 后 0x98 同步全局对象属性(既有可写 属性原地更值、保 e/c 位),裸读镜像与 globalThis 反射不失步 - for-in 头 tier 写点移除 builtin 名例外:可写 builtin 名迭代键照规范 覆写全局属性(三常量仍由拦截臂跳过) - 三常量(undefined/NaN/Infinity)全局描述符 configurable 翻正为 false:delete 拒绝、属性保留,描述符读同步 - 脚本顶层受限词法名集 3→4(补 eval,静态受限臂):let/const/class eval 顶层声明编译期 SyntaxError - 配套钉:7 处既有钉随 c 位翻正 + 2 枚 for-in/eval 形态钉反转,新增 global_builtin_writable_tests(16 钉:双写六形态 + 遮蔽/strict/eval/ 宿主名面) test262 子集:built-ins/global 29/29、三常量族 20/20、11.13.1-4 7/7、 assignmenttargettype plain 8/8 全绿;language/global-code 17 失败文件 双树单跑一致(pre-existing);annexB assignmenttargettype 7 个 parse error 为既有解析器缺口
This commit is contained in:
@@ -625,16 +625,16 @@ impl KernelSession {
|
||||
let si_undef = core.perm_interner.intern("undefined").0;
|
||||
let si_infinity = core.perm_interner.intern("Infinity").0;
|
||||
|
||||
// 全局三常量描述符:{ writable:false, enumerable:false, configurable:true }。
|
||||
// 全局三常量描述符:{ writable:false, enumerable:false, configurable:false }。
|
||||
// e:false 是枚举面守卫(Object.keys / for-in 由 enumerable 决定);
|
||||
// c:true 是 delete / defineProperty 可观察的规范值(delete globalThis.undefined
|
||||
// 属性真删、返回 true)。
|
||||
// c:false 是 delete / defineProperty 可观察的规范值(delete globalThis.undefined
|
||||
// 返回 false、属性不可删,后续声明/定义均不得 reconfigure)。
|
||||
let nan_shape = core.shape_forge.make_shape(EMPTY_SHAPE_ID, si_nan);
|
||||
global_obj.set_shape_id(nan_shape);
|
||||
global_obj.ensure_hash_props().push(JsValue::float(f64::NAN));
|
||||
global_obj.set_data_meta(
|
||||
global_obj.prop_vec_len().saturating_sub(1) as u32,
|
||||
oxide_types::object::PropAttributes::new(false, false, true),
|
||||
oxide_types::object::PropAttributes::new(false, false, false),
|
||||
);
|
||||
|
||||
let undef_shape = core.shape_forge.make_shape(nan_shape, si_undef);
|
||||
@@ -642,7 +642,7 @@ impl KernelSession {
|
||||
global_obj.ensure_hash_props().push(JsValue::undefined());
|
||||
global_obj.set_data_meta(
|
||||
global_obj.prop_vec_len().saturating_sub(1) as u32,
|
||||
oxide_types::object::PropAttributes::new(false, false, true),
|
||||
oxide_types::object::PropAttributes::new(false, false, false),
|
||||
);
|
||||
|
||||
let inf_shape = core.shape_forge.make_shape(undef_shape, si_infinity);
|
||||
@@ -650,7 +650,7 @@ impl KernelSession {
|
||||
global_obj.ensure_hash_props().push(JsValue::float(f64::INFINITY));
|
||||
global_obj.set_data_meta(
|
||||
global_obj.prop_vec_len().saturating_sub(1) as u32,
|
||||
oxide_types::object::PropAttributes::new(false, false, true),
|
||||
oxide_types::object::PropAttributes::new(false, false, false),
|
||||
);
|
||||
|
||||
P::new(global_obj)
|
||||
|
||||
Reference in New Issue
Block a user