Commit Graph

91 Commits

Author SHA1 Message Date
pjh123 3cc811e730 style: 订正对象方法发射长行折行 2026-10-10 06:53:08 +00:00
pjh123 958cc1f7a2 feat: super 属性写新建 SUPER_PUT_PROP 指令 2026-10-10 01:37:39 +00:00
pjh123 c38e91a65a feat: 对象方法 super 门加计算型 super 成员加 VM 步序对齐 2026-10-10 01:09:06 +00:00
pjh123 c7f7588b81 style: 全 workspace 格式订正,消除 fmt 漂移 2026-10-09 23:58:34 +00:00
pjh123 dbdc5556c6 feat: 默认参数自引用与后位引用读抛 TDZ ReferenceError 2026-10-09 23:58:14 +00:00
pjh123 6ba2043599 feat: 写路径四路加函数名不可写守卫,sloppy 静默 strict 抛 TypeError 2026-10-09 22:20:20 +00:00
pjh123 4f6bd5d947 feat: 函数名登记为作用域内不可写绑定并按帧槽写入函数对象 2026-10-09 21:32:51 +00:00
pjh123 4030cb4224 feat: with 回退未声明名写落隐式全局 2026-10-09 17:17:49 +00:00
pjh123 66735f802f refactor: string_forge 与命名空间绑定常量迁入 oxide_types 中立层 2026-10-08 05:03:05 +00:00
pjh123 6a2f5616f1 fix: 删后复合逻辑赋值与 update 表达式 LHS 旧值读抛 ReferenceError 2026-10-06 06:25:31 +00:00
pjh123 ee3eb1892a fix: with 内 delete 回退臂解析外层绑定按可删除性定值 2026-10-06 04:48:01 +00:00
pjh123 5239ff74b8 feat: 捕获 cell 换键地基——绑定增 cell_idx 并解析点按绑定身份取索引 2026-10-05 12:01:49 +00:00
pjh123 631d430772 fix: 自增减发射面 a 槽别名写改可见活寄存器序列,防冲毁活值 2026-09-26 21:17:47 +00:00
pjh123 9a502e634a fix: 删后裸读已知全局内置名经 A 侧抛 ReferenceError 2026-09-20 08:38:11 +00:00
pjh123 ae71adcaab fix: spread 字面量 elision 置洞并扩长 2026-09-19 12:44:47 +00:00
pjh123 4236290b45 fix: 不可扩展对象设置原型返回失败 2026-09-18 01:23:02 +00:00
pjh123 ac6a48412b fix: 删除 super 属性按规范报错并补 setPrototypeOf 内置 2026-09-18 01:06:48 +00:00
pjh123 3de0f8a6cb feat: 跨模块可重赋导出活读 2026-09-18 00:46:06 +00:00
pjh123 39183f449c fix: 模块写穿按绑定槽过滤并覆盖更新赋值路径 2026-09-18 00:32:12 +00:00
pjh123 ed65b5282f feat: 模块命名空间枚举读活值并支持写穿 2026-09-18 00:02:21 +00:00
pjh123 e86ec8d7d2 fix: 修正捕获可见性过滤的前向捕获与隐式全局误判 2026-09-17 20:07:23 +00:00
pjh123 738cf620c1 fix: 捕获名解析增加块作用域可见性检查 2026-09-17 19:29:33 +00:00
pjh123 37b1c4a62b fix: 嵌套函数删除隐式全局名后外层读取不再取残留 2026-09-17 17:29:25 +00:00
pjh123 a8c47a04a2 docs: 统一表达式读点注释并修正数组乱码 2026-09-17 15:39:54 +00:00
pjh123 423f075ddc refactor: 顶层程序发射迁出 emit.rs 独立成 program 模块 2026-09-15 22:27:29 +00:00
pjh123 54c1da6433 fix: eval 顶层 let/const 的 delete 探针臂收窄至 var/函数名集 2026-09-15 17:05:59 +00:00
pjh123 4452f1da69 fix: delete 标识符按 DeleteBinding 三分类发运行期探针,补真删与读侧效应 2026-09-15 05:03:28 +00:00
pjh123 169e3aa62b fix: delete 补括号剥层与非引用目标恒真臂,未声明名归真 2026-09-14 23:54:56 +00:00
pjh123 ca5c27574e fix: directive 序言字符串按源序先发射且完成值参与收敛 2026-09-14 21:07:10 +00:00
pjh123 6f70d7d09f vm/kernel/emit/builtins: 动态源编码重设计 + 数值键 2^32 边界 + 单元域解码/Source 面——14 头独占 test262 回归 13 修 0 新增
全量 A/B 差分撞出 14 个头独占回归,本提交闭合 13(text-self.js 双树同败归 pre-existing):

数值键 u32 回绕(release 态,debug 为 panic 故单测未现):canonical_index_str/
units 的 v.checked_mul(10)? + d as u32 在乘积合法而和溢出 2^32 时静默回绕
(10 位数字串 "4294967296".."4294967299" 误判整数键 0..3,属性查找回
退、Object.keys 串键),改 checked_mul+checked_add 双段防溢出;str/units 各
钉一枚 2^30-1/2^30/2^32-1/2^32 边界(Group B 5 文件:defineProperty/
defineProperties 2^32 键族 + Array property-cast-number)。

decodeURI/decodeURIComponent 单元域重写(Group A 2 文件):decode_uri_units
按单元扫描(非 % 单元原样透传——孤立 surrogate 往返不再被 lossy 串值面
打碎),%XX 解单元入缓冲;string_arg_units 经 to_units_full 取单元。

动态源编码(eval/Function/$262.evalScript)重设计(Group A 6 文件 + value-u):
source_escape 旧设计把源码域反斜杠恒双写(与 marker 起始区分),但源码即
JS 程序、反斜杠恒为字面量内转义序列起始,双写改变程序语义——
/\u{1d306}/u 变 /\\u{1d306}/u,u 模式撞裸 { 直接 SyntaxError(value-u 回归
根因)。现反斜杠原样透传;孤立 surrogate/FFFD 单元仍以 \\uXXXX 转义文本
注入(Rust str 无法承载裸孤立 surrogate,转义文本是唯一注入形态);
source_escape_to_key 逆路径仅还原注入 marker(\\ud800..\\udfff/\\ufffd
小写转义文本 → FFFD+hex4 池键形态,物化 decode_key 还原原始单元,正则
.source 按原始源返回;用户转义文本 \\u0041/\\u{1d306} 等逐字透传),
\\+marker 拼接形态(数据反斜杠紧邻注入,S7.8.5_A1.4 族 cu=d800 断言)按
前瞻还原 [数据反斜杠, 单元]。source_encoded 标志经 Compiler→Emitter→CompileCtx
(嵌套继承)贯通,仅动态编译入口置位;静态源切片维持 pool_key_plain 不变。

RegExp [[Source]]/[[Flags]] 单元域(regexp 构造器):to_units_full →
new_string_units_owned 入键(旧 lossy to_string 把孤立 surrogate 单元打成
FFFD,src_match 探针 false);regress 编译仍 lossy(既有缺口,另行报告)。

三并钉:source_escape marker 形态 / 反斜杠透传 / decode_key∘to_key∘escape
闭环(含 \\+marker 相邻与 astral 对)。实测:Group A 8/8、Group B 5/5、
value-u 1/1;8178 文件回归子集(13 目录)双树 A/B 差分 HEAD-only=∅、
13 文件转双树同 pass;text-self.js 双树同 compile 败
(requested module export is not exported: default)归 pre-existing;
七 crate 单测 2879/1(唯一失败 compile_class_declaration_emits_constructor
为 HEAD~0 既有,本提交未引入)。
2026-09-14 07:16:00 +00:00
pjh123 0c750fa74c emit/kernel/vm/builtins: 常量池键编码 + 键物化真实串值面 + 16 回归钉——emit 侧字面量/键/模板统一改存无标志键编码:lone_surrogates 字面量与模板 cooked 按 oxc marker 解码还原真单元序列(FFFD+hex4≠fffd→surrogate 单元、FFFD+fffd→FFFD、FFFD+非 hex 防御臂),无标志串 encode_key(encode_utf16()) 入池(BMP 无 FFFD 键恒等 = 现值,池条目零漂移),string_pool 集中收口 9 处入池点;interner string_ptr 由单元物化(含孤立→FlatU16、良形→Flat);键物化面改真实 JS 串值(key_si_to_js_value 经 decode_key,Object.keys/ownKeys/entries/Reflect.ownKeys/json reviver 键同源;整数键反解数字串);批内修复三处子集 A/B 差分撞出回归:replace $n 展开按 spec GetSubstitution 重写(digitCount 2/1、越界回退 1 位、越界含 $0 原文输出,node 13 用例对照钉住)、String 构造器 Symbol 路径按 new.target 分流(String(sym)→描述串、new String(sym)→TypeError,恢复 to_string_for_string_constructor)、padStart/padEnd 未给 fill 时按单空格补(原 lossy 串取 'un' 杂质,pre-existing 一并归零);迭代器 dispose 钉改回真值断言(String(Symbol.dispose) 现合法返回描述串);property-escapes 613/0/0(B167 基线 582/31/0,31 归零)、String 子集 963/250/10 vs BASE 949/264/10(14 修 0 回归)、for-of +1(string-astral-truncated)、五 crate 113 套件 2680/0、clippy/fmt 零新增(JSON 面与全量 test262 收尾在 131.2 后续 commit 闭合) 2026-09-14 03:04:23 +00:00
pjh123 f088858cf4 emit/vm: 可删全局内置集撤 globalThis 与 TypedArray 两名——现行规范 globalThis 为 c:true 可删(真删清槽)、%TypedArray% 无全局名(删不存在属性返 true),宿主名排除面收窄至 $262,delete 子集 A/B 逐文件零翻转 2026-09-13 17:07:51 +00:00
pjh123 699059aee5 emit/vm: delete 全局可写内置标识符真删属性并清镜像槽——新增 DELETE_GLOBAL_PROP_C,可删名集自可写划分单源派生(除 globalThis 与宿主名),test262 delete JSON 用例由红转绿 2026-09-13 12:26:01 +00:00
pjh123 c564ec539b 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 为既有解析器缺口
2026-09-13 10:46:10 +00:00
pjh123 44c16cab8a fix: 顶层 var 读写直连全局对象属性单一真值——GDI 序言 + 声明处同步删除,类原型 session 直分防晋升克隆 identity 分裂,自增减 int 保持 2026-09-12 15:48:32 +00:00
pjh123 430231236d fix: 未声明标识符读写混合解析——读侧登记的全局槽写不穿透全局对象
未声明名由首次引用侧登记全局槽:读侧(LOAD_GLOBAL 槽)登记后,
后的写点只查写侧集合,补全局对象属性写被跳过——条件读走全局
属性、写落脚本内寄存器,脱节成死循环;更新式/复合式/逻辑赋值的
旧值又取自入口快照槽(读从不刷新槽),先读后写算出陈旧值。

写点隐式全局判定改读写登记集合取并(7 处),RMW 旧值读前经
LOAD_GLOBAL_TYPEOF 从全局对象取当前值(缺失按 undefined,sloppy
未解析引用 GetBaseValue 语义),读侧登记集合随继承绑定传入子
函数 ctx。
2026-09-11 10:14:56 +00:00
pjh123 eabd0b3608 fix: 逻辑赋值标识符目标接入不可写全局内置拦截,目标位置内置预登记稳定槽解析 2026-09-10 02:30:09 +08:00
pjh123 b77a9322e5 fix: 不可写全局内置(undefined/NaN/Infinity)寄存器镜像写编译期拦截——sloppy 静默 no-op、strict 抛 TypeError 2026-09-09 23:17:01 +08:00
pjh123 d9c2847730 fix: sloppy 未声明写隐式全局创建 + strict ReferenceError——DEFINE_GLOBAL_PROP_C 0x98 2026-09-09 18:44:38 +08:00
pjh123 64f582d34b chore: rustfmt 全量格式化——CI fmt check 差异清零 2026-09-09 15:14:57 +08:00
pjh123 0ffb5d2cf3 fix: tagged template 语义修正——cooked undefined/this绑定/site缓存/冻结 + groupBy getter 异常传播 + defineGetter setter 保留 2026-08-22 11:15:55 +08:00
pjh123 c7b54cb181 feat: String.raw/groupBy/withResolvers/f16round/__defineGetter__ 低垂果实批量实现 2026-08-22 10:26:00 +08:00
pjh123 089179daab refactor: 函数 strict 标志入 IR/编译/缓存链(零行为地基) 2026-08-16 16:46:33 +08:00
pjh123 fe8892079e chore: 全仓 rustfmt 格式化归拢 2026-08-16 12:50:36 +08:00
pjh123 648842fd82 feat: new.target MetaProperty emit 支持(LOAD_VAR NewTarget) 2026-08-16 12:43:50 +08:00
pjh123 bbc09a8208 feat: 私有字段复合赋值 emit 支持(GET_PRIVATE→op→SET_PRIVATE 序列) 2026-08-16 12:12:26 +08:00
pjh123 75153a909d fix: 未声明标识符读取抛 ReferenceError(typeof 特判返回 undefined) 2026-08-16 00:10:08 +08:00
pjh123 7f1187feaf fix: 非常量键成员 **= 复合赋值 rhs 生效 2026-08-15 23:20:36 +08:00
pjh123 bca463438d fix: for-const 循环 update 段豁免 const 写检查(per-iteration 绑定合法) 2026-08-15 22:29:09 +08:00
pjh123 26db7ae07c fix: TDZ 写与 const 赋值检查补全(含闭包捕获路径) 2026-08-15 21:55:43 +08:00