Commit Graph

28 Commits

Author SHA1 Message Date
pjh123 e154b12126 perf: CallFrame 构造 this 判别位并入 bool 组省 8 字节 2026-10-13 08:18:34 +00:00
pjh123 f78f7617fd style: 自动格式化 2026-10-12 19:47:18 +00:00
pjh123 d026ea626e perf: run 装载期常量转换与 si 侧表改 Vm 模块级缓存 2026-10-12 19:47:16 +00:00
pjh123 2b18c4d264 feat: mapped arguments defineProperty 后参数与 arguments 再同步 2026-10-09 23:27:18 +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 fce50e3f64 perf: for-of 快路径快照 inner 与游标入条目,免每步槽协议 2026-10-04 22:44:05 +00:00
pjh123 26a46f802b refactor: 退役三族挂起快照克隆重写与指针重写死函数 2026-10-02 23:01:13 +00:00
pjh123 89655f0b7f refactor: 退役 session_epoch Bump 字段 2026-10-02 18:09:37 +00:00
pjh123 ab0b874281 refactor: 晋升族整文件退役加生产调用点清理 2026-10-02 16:55:04 +00:00
pjh123 d7f54e331a style: 折叠签名与调用折行对齐格式检查 2026-10-01 09:37:54 +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 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 41a3aef29e fix: CREATE_CLOSURE 跨 run 帧按执行帧表代际解析——嵌套闭包错代盖写闭合,挂起恢复重设活跃代际,OOB 消息上界对齐实际查表代际 2026-09-12 22:04:42 +00:00
pjh123 d9c469e9d0 fix: 子模块表代际注册表——跨 run 存活函数按创建期表代解析子模块,索引悬空与静默错模块闭合 2026-09-12 19:27:22 +00:00
pjh123 c8bcff83f6 fix: sloppy 模式属性赋值静默 no-op——写失败按写方严格模式分派,内置写路径一律按严格 2026-09-09 17:48:33 +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 8c4b766e70 fix: 构造帧 super 状态改显式标志修复多层继承与 return 语义
derived 构造器 super 状态改由 CallFrame.super_called 显式标志承载,
取代依赖 regs[254] 值判定:多层继承中间 derived 帧由 SUPER_CALL 压入
this=构造对象,值判定三重失效(未调 super 不报错 / this-before-super
失效 / 合法 super() 误判 more-than-once)。父构造器正常返回经
construct_result_reg==Some(254) 识别置位调用方帧(该 ABI 不变量仅
SUPER_CALL 压帧满足),抛错走 unwind 不置位。

do_return 检查放宽为非对象返回值(含 undefined/null/原始值)且未调
super 时抛 ReferenceError(规范 §9.2.2.2),调过 super 回退构造 this。

super 构造器改取当前帧 callee 原型而非 newTarget 原型:newTarget 跨
SUPER_CALL 压帧保持为最外层类,取其原型在中间 derived 层解析回同一
父类导致无限压帧。
2026-08-16 01:23:52 +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 7362137720 chore: 清理 oxide_vm clippy 告警 2026-08-14 05:26:46 +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 ea98752e9f refactor: 移除 SuspendedFrame 已无必要的 dead_code 豁免 2026-08-10 14:28:09 +08:00
pjh123 7318f8f2eb refactor: 新增 SuspendedFrame 共享挂起快照(save/restore/GC 遍历/深拷贝/记账) 2026-08-10 13:05:27 +08:00