Commit Graph

71 Commits

Author SHA1 Message Date
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
pjh123 7efb26bc96 perf: 函数调用 bytecode 改 Arc 共享(O(1) 帧切换 + IC 写时复制) 2026-08-10 15:08:51 +08:00
pjh123 46e7bceb07 refactor: save/restore 收敛为字段表宏单一登记,补齐 accessor_frame_target_reg 2026-08-10 14:18:58 +08:00
pjh123 9d18eb2533 refactor: GeneratorState 收敛到 SuspendedFrame(save/restore/GC 遍历/string 边) 2026-08-10 13:28:14 +08:00
pjh123 5ced83e8c0 feat: async-generator 语义(async function*),yield/await 共存 + next 返回 Promise
- emit 识别 generator+async 组合,模块同时标记 is_generator/is_async
- 新增 AsyncGeneratorState:帧快照 + 请求队列 + 当前请求
- next/return/throw 返回 Promise,请求入队逐条处理
- YIELD 让出经 promise unwrap 后交付(yield rejected promise 关闭生成器)
- AWAIT 挂起保留当前请求,微任务恢复后继续执行
- %AsyncGeneratorPrototype% / %AsyncGeneratorFunction.prototype% 内建
- session GC / promote 支持异步生成器状态盒
- 普通 async 函数嵌套调用隔离外层异步生成器上下文
2026-08-10 01:52:03 +08:00
pjh123 fd47cd56d0 feat: async/await 语法支持(AWAIT 帧快照挂起/恢复 + 微任务驱动 + AsyncFunction intrinsics) 2026-08-09 22:02:15 +08:00
pjh123 538a5670dc feat: Promise 基础子系统 + 微任务队列(resolve/reject/then/catch/finally + run() drain) 2026-08-09 21:08:53 +08:00
pjh123 783e89e4cb feat: 生成器基础支持(YIELD 帧快照挂起/恢复 + GeneratorPrototype next/return/throw)
- 新增 YIELD/SUSPEND_BODY opcode;function* 识别与 yield emit
- GeneratorState 全量快照 VM 执行上下文(regs/pc/bytecode/spill/save/try/cell 栈段/迭代器)
- 调用时参数初始化(默认值/解构副作用与异常在 g() 时刻生效)
- %GeneratorPrototype%/%GeneratorFunction.prototype% 内建对象与 next/return/throw
- session GC trace 生成器状态 JsValues;闭包捕获分析补 yield/赋值目标扫描
2026-08-09 18:02:08 +08:00
pjh123 a0c271ef3c fix: try 内 return 泄漏 TryHandler,异常跳回死函数 catch 死循环 2026-08-09 07:41:34 +08:00
pjh123 5611d90ad0 feat: with 语句、成员位/移位复合赋值、CALL_NATIVE 无目标修复
with 语句:新增 emit 支持,with 体内自由标识符动态解析(对象属性优先,
回退外层),支持读/写/复合赋值/自增自减/delete/var 初始化动态化,
TO_OBJECT opcode 处理原始值对象,顶层 this 绑定全局对象。

复合赋值:新增 6 个 COMPOUND_MEMBER_BIT_* opcode 支持成员位/移位复合赋值,
修复 computed member 复合赋值覆盖 bug,with 内标识符复合赋值动态化。

CALL_NATIVE:实现全局 isNaN/isFinite 并绑定,用户覆盖 builtin 名时
回退通用调用路径而非报错,局部遮蔽 builtin 名走普通 CALL。

test262: with 34 pass(基线 0),compound-assignment 320 pass(基线 223)
2026-08-09 07:22:46 +08:00
pjh123 cd214069cd fix: try/finally 支持 break/continue/return 穿越 finally(completion 机制) 2026-08-08 12:38:25 +08:00
pjh123 bfcf132d73 feat: arguments 对象绑定(CREATE_ARGUMENTS + 帧实参 spill 区) 2026-08-08 00:01:22 +08:00
pjh123 710c8c8a2c fix: 闭包 upvalue cell 占位稳定化修复错读调用方表 2026-08-07 14:38:47 +08:00
pjh123 fd94ff6931 fix: 子模块全局扁平化根治逃逸闭包上下文错位 2026-08-07 10:49:15 +08:00
pjh123 dd5607ce1a fix: inline 回调支持 upvalue 闭包上下文 2026-08-07 00:23:35 +08:00
pjh123 710965b7f2 fix: new 构造 cell_stack 失衡与子模块 immutables 缓存失步 2026-08-07 00:15:09 +08:00