Commit Graph

86 Commits

Author SHA1 Message Date
pjh123 555892c004 feat: 实现 Iterator.zip 构造期与 shortest 迭代 2026-10-16 10:43:59 +00:00
pjh123 442857fab0 style: 自动格式化 2026-10-13 18:00:27 +00:00
pjh123 cc8db162a0 feat: TLA 模块求值 VM driver 单次 drain 到静止 2026-10-13 18:00:24 +00:00
pjh123 d026ea626e perf: run 装载期常量转换与 si 侧表改 Vm 模块级缓存 2026-10-12 19:47:16 +00:00
pjh123 05b9b280cf refactor: 写路径契约与压帧与异步标志组收结构体并删死参 2026-10-12 19:12:11 +00:00
pjh123 c7f7588b81 style: 全 workspace 格式订正,消除 fmt 漂移 2026-10-09 23:58:34 +00:00
pjh123 71904a644f feat: await using 释放挂起跨微任务续行并合并 SuppressedError 2026-10-09 20:50:35 +00:00
pjh123 ae73fb8da5 feat: 异常与 return 穿越释放资源,dispose_count 门控 2026-10-09 19:14:36 +00:00
pjh123 48ffb54c4f feat: 七类作用域出口正常释放 using 资源,for-of 每迭代 2026-10-09 18:40:24 +00:00
pjh123 b5ff2c132a feat: using 声明登记释放栈指令与 GC 根 2026-10-09 17:55:08 +00:00
pjh123 b240cbd305 feat: 对象层惰性模块命名空间求值触发 2026-10-09 15:13:19 +00:00
pjh123 582475363b feat: run 装载期对共享模块字节码显式复制,COW 深拷贝移出热路径 2026-10-09 09:07:20 +00:00
pjh123 0d6d06cd1f style: 修 rustfmt 格式化差异 2026-10-09 06:13:36 +00:00
pjh123 349164f244 refactor: 从 run 抽 execute_task 与 drain_microtasks 两原语 2026-10-08 09:00:31 +00:00
pjh123 c6bc93a076 refactor: realm 与 Vm 生命周期解耦,Vm 持 Arc<Realm> 2026-10-07 01:35:16 +00:00
pjh123 14ef287a75 refactor: 提取 Realm 组合类型,session 与 GC 及原型槽归 realm 2026-10-07 00:13:24 +00:00
pjh123 8e6703e606 fix: 采样样本记表代际,直方图按代际解析函数名并订正并列注释 2026-10-04 22:55:06 +00:00
pjh123 fce50e3f64 perf: for-of 快路径快照 inner 与游标入条目,免每步槽协议 2026-10-04 22:44:05 +00:00
pjh123 b77f75b237 feat: 新增采样器按指令周期记录样本并输出热点直方图 2026-10-04 21:40:26 +00:00
pjh123 463760dfda perf: 对象字面量静态键装载期预内部化,构造期直读侧表 2026-10-04 12:08:46 +00:00
pjh123 ab0b874281 refactor: 晋升族整文件退役加生产调用点清理 2026-10-02 16:55:04 +00:00
pjh123 0e3992722e fix: for-in 残留体经内联快照恢复时先释放再搬回快照 2026-10-01 05:02:21 +00:00
pjh123 c671a6cfb0 refactor: for-in 迭代器体脱离 epoch arena 改堆上 Box 独占释放 2026-09-29 16:10:15 +00:00
pjh123 b3255faa46 perf: 压帧时固化 callee upvalue 表,热路径免每指令重查 2026-09-28 17:24:10 +00:00
pjh123 9ab19fb472 feat: for-await-of 逃出关闭异步 await return() 结算后恢复帧 2026-09-27 19:48:19 +00:00
pjh123 b14ea8ff43 fix: 返回清空 sloppy 函数 arguments 属性,末次 arguments 对象不再保活晋升
dispatch_create_arguments 把 sloppy 函数的 own arguments 数据属性设为本调用的
arguments 对象,调用返回后从不清除,强引用保活最后一次调用的 arguments 对象,
跨 epoch 晋升后泄漏(object_graph_retention_anchor 32770 vs 32769)。

restore_frame 弹帧时按 sloppy 且属性在场清空该属性(置 undefined),与 V8 对
非执行中函数 func.arguments 返回 undefined 的语义对齐;strict 函数无 own
arguments,不涉及。
2026-09-27 04:10:12 +00:00
pjh123 f8722ca91d fix: sloppy 函数调用原始值 this 按规范盒装为包装对象 2026-09-27 00:49:22 +00:00
pjh123 717960a9e8 perf: upvalue 读取缓存 callee 切片指针省解引用链 2026-09-26 20:30:53 +00:00
pjh123 bf19cf112b perf: for-of 内置迭代器快路径直步,跳过 native 调用帧 2026-09-26 19:59:23 +00:00
pjh123 1d7561d07c fix: 恢复边界镜像重载跳过 native pack 实参区 2026-09-19 19:26:06 +00:00
pjh123 e1117eb6a3 docs: 修正异步函数调用的注释语义 2026-09-17 14:23:26 +00:00
pjh123 6c4b49b196 docs: 补齐虚拟机运行时与调用绑定注释 2026-09-17 14:11:06 +00:00
pjh123 d877e63cf1 fix: 全局对象成员写与删后镜像槽反向同步防裸读失步 2026-09-14 13:10:17 +00:00
pjh123 60274baca8 fix: rerun 恢复顶层 this——清空寄存器文件后依赖 this 的顶层写(顶层 var 全局同步写)在重执行中不再静默丢弃 2026-09-12 21:36:10 +00:00
pjh123 d9c469e9d0 fix: 子模块表代际注册表——跨 run 存活函数按创建期表代解析子模块,索引悬空与静默错模块闭合 2026-09-12 19:27:22 +00:00
pjh123 f1d2f7cb47 test: 顶层模块共享护栏钉——平表顶层与宿主 Arc 同一实例(含 full_reset 后二次 run),run 后宿主缓冲 IC 扩展字恒零且 Vm.bytecode 为 COW 私有拷贝 2026-09-11 22:24:17 +00:00
pjh123 3169e8f2f9 perf: run 签名改 &Arc<CompiledModule>,顶层模块跨 run 共享——collect_flat_modules 顶层改 Arc::clone 消除逐 run 常量池深拷贝,全调用点 Arc 包装迁移 2026-09-11 22:19:13 +00:00
pjh123 0302640056 fix: 调度标志经内联 state-swap 边界泄漏——C 侧无帧 accessor 调用继承属主调度上下文,构造帧弹出后误判提前交付、被调函数构造后字节码被跳过
根因:generator/async/construct 三个调度标志是 VM 全局字段,不经
InlineSyncState 在 state-swap 边界保存/恢复。C 侧路径(builtin 经
ordinary_get 无帧调用 accessor,走 call_bytecode_function_inline 状态
交换、不压边界帧)在生成器/异步属主 dispatch 上下文内运行时继承泄漏
标志;被调函数内 new 字节码构造器() 的构造帧是嵌套 dispatch 帧栈唯一
帧,构造器 RETURN 弹出后帧栈清空,do_return 的 frames.is_empty() &&
调度标志 误判为属主 dispatch,提前交付构造残留,被调函数构造点之后
的字节码整体不执行(getter 的 throw 被吞,属性读拿到 undefined)。
上层 FDI rest 绑定循环因此永不见 done,步数上限后初始化/恢复方把
异常折成通用错误。

修复:三标志纳入 InlineSyncState,新增 flag_zero 算子臂(save 快照
属主值并清零 VM 侧、restore 写回)——嵌套内联调用不继承外层调度
上下文。既有置位点全部在 save 之后、属主 dispatch 之前,语义不变;
do_return 交付条件注释同步更新。

回归钉:inline_dispatch_scoping_tests——C 侧 accessor 构造后 throw
穿透 instanceof Error、C 侧取值 42、字节码帧边界对照、顶层对照
(修复前两枚 C 侧钉失败)。
2026-09-11 11:14:10 +00:00
pjh123 c8bcff83f6 fix: sloppy 模式属性赋值静默 no-op——写失败按写方严格模式分派,内置写路径一律按严格 2026-09-09 17:48:33 +08:00
pjh123 0ffb5d2cf3 fix: tagged template 语义修正——cooked undefined/this绑定/site缓存/冻结 + groupBy getter 异常传播 + defineGetter setter 保留 2026-08-22 11:15:55 +08:00
pjh123 9f64962b20 fix: sloppy 普通函数调用 this 未定义/null 绑定全局对象 2026-08-16 16:58:32 +08:00
pjh123 e54b877f17 fix: 异常值通道配对——忽略调用槽配对、unwind 接住清槽、生成器参数初始化不覆盖异常值 2026-08-16 11:29:50 +08:00
pjh123 744899aae9 fix: for-of/for-in 提前退出时按规范顺序完成 IteratorClose
return/break/continue 逃出 for-of 时此前完全不执行 IteratorClose:
BREAK/CONTINUE/RETURN 指令现在经 ext 字携带词法逃出的迭代器层数
(for-of + for-in 各 16 位),运行时在全部 finally 穿越之后、真正
跳转/返回之前按 LIFO 关闭——与规范 §13.7.5.4(循环体完成值已含
内部 try-finally 处理,IteratorClose 在后)顺序一致。

- emit 词法:LabelCtx 增加 for-of/for-in 深度计数,loop/switch/label
  打开时快照,break/continue/return 按当前深度减目标深度计算逃出层数
  (switch 内 break 以 switch 打开点为基准,目标循环自身不计入)
- 指令编码:brk/cont/ret 三参构造,lower 跳转路径补发 ext 字
- 运行时:dispatch_break/continue/return 读取逃出计数,无 finally 时
  直接关闭后跳转/返回,有 finally 时随 Completion 悬挂由 TRY_FINALLY_END
  在穿越完成后消费;生成器 .return()/.throw() 注入经 complete_generator_return
  全关快照栈迭代器;return() 抛错经 unwind 替代完成值并关闭剩余迭代器
- 顺带:for-in 逃出残留(无 return() 语义,仅弹栈);for-await-of 的
  异步迭代器不做同步关闭(return() promise 须 await,走异步机制)
- 新增 15 项回归测试:return/labeled break/continue/switch/while/finally
  顺序/抛错优先/生成器注入/for-in/for-await-of 嵌套
2026-08-16 09:31:39 +08:00
pjh123 2e16b63d9b feat: for-of 迭代器栈条目化:迭代器与最近 next 结果配对存放
单一 last_for_of_result 槽被嵌套迭代覆盖,CLOSE 判定本迭代器是否
自然 done 时误读他者结果,导致数组解构/spread/嵌套 for-of 提前退出
漏调或误调 return()。改为栈条目 (iterator, last_result) 配对:

- IterState.for_of_iters 元素改 ForOfEntry,删除 last_for_of_result
- INIT 压条目,DONE 写本条目,NEXT/CLOSE 读本条目结果判 done
- GC mark/rewrite、inline save/restore、挂起帧快照同步配对遍历
- for-await-of 数组解构提前 break 现正确触发 return()(任务 40 样例)
2026-08-16 04:00:06 +08:00
pjh123 37252e55b5 perf: 三处手写压帧收敛单一入口并免实参堆 Vec 物化 2026-08-15 10:27:14 +08:00
pjh123 d9acda7417 perf: 字节码调用压帧窗口按调用点存活上界拷贝减少整窗搬移
RegAlloc 改写后补第三次 liveness,为每条 CALL/NEW/SUPER_CALL 计算调用点
存活上界(最大存活物理槽号 + 1,254/255 由帧单独保存不计入),编码进
ext 高 8 位(nargs 低 8 位不变)。三处手写压帧窗口 = min(调用方活动寄存
器, 存活上界),restore_frame 按窗口回拷;CallFrame 新增
caller_active_reg_limit 保存调用方真实活动上限,恢复时不随截断窗口缩水。
生成器/异步函数体调用点保持全量窗口。spread 调用与运行时发起压帧
(accessor/内联)走全量路径不受影响。
2026-08-15 09:56:22 +08:00
pjh123 f9f54214fa fix: inline 回调窗口保存上限提到 254 覆盖物理槽 253
RegAlloc 合法产物 n_registers=254(builtin 槽落 253 或高活度着色)的
inline 字节码回调会写 regs[253],而 save_inline_state 窗口截断
regs_end.min(253) 漏存该槽,restore 不回拷 → 调用方 active_reg_limit=254
时 regs[253] 活动值静默丢失,与 native 分支 saved_r253 单存不对称。
窗口上限 253→254 后保存 regs[0..=253] + 254/255 单存,与全量 256 语义
逐槽等价;同步修正 InlineSyncState 与 save_inline_state 文档。

补三条回归:窗口 254 往返(含槽 253)、n_registers=254 inline 回调不
覆盖调用方活动 regs[253]、native 回调内嵌 254 寄存器 inline 回调不污染
外层 receiver 槽。
2026-08-15 04:16:59 +08:00
pjh123 57a3148d77 perf: 数组回调字节码调用改寄存器窗口复用减少搬移 2026-08-13 20:11:09 +08:00
pjh123 df23fdff39 feat: compiler/test262 runner 接线 + 模块顶层 this 绑定
- Compiler::compile_module:Emitter::emit_program_module → 统一 IR 管线(DCE/regalloc/lower/flatten)
- CompiledModule.is_es_module:VM run 时模块顶层 this=undefined(脚本仍为全局对象)
- 全局注册 __moduleLinkGet
- test262 runner:Test262ModuleLoader(相对路径解析 + import attributes 判定 json/text/bytes),is_module 走 compile_module
2026-08-12 17:37:33 +08:00
pjh123 8163a5d25e perf: 子模块树改 Arc 共享,run() 免深拷贝模块树 2026-08-10 17:23:29 +08:00