pjh123
5fa60ac668
feat: eval 全局注册与最小执行(间接 eval)
2026-08-16 22:25:33 +08:00
pjh123
ea8631643d
feat: ZonedDateTime.withTimeZone 与 equals 基础实现
2026-08-16 22:07:38 +08:00
pjh123
93c80ff9c3
feat: ZonedDateTime.toString 族(toJSON/toLocaleString/valueOf 绑定)
2026-08-16 21:56:57 +08:00
pjh123
2f7832a125
feat: ZonedDateTime 27 个属性 getter 宏化实现
2026-08-16 21:21:07 +08:00
pjh123
c3f19abe1c
feat: AsyncDisposableStack disposeAsync 状态机(needsAwait 微任务序 + 错误链合并 + 绑定三时机)
2026-08-16 20:11:50 +08:00
pjh123
17e49165e4
feat: DisposableStack 测试九组(构造器/方法语义/原型形状/GC 交叉)
2026-08-16 19:32:23 +08:00
pjh123
eb12a12f2f
feat: DisposableStack 内置对象(状态盒 + use/adopt/defer/dispose/move + GC 六处接线 + 绑定三时机)
2026-08-16 19:22:57 +08:00
pjh123
2b74fa81a6
fix: Error 子类型构造器描述符与原型链对齐规范(prototype/name meta + [[Prototype]] 指向 Error)
2026-08-16 19:10:51 +08:00
pjh123
d213d697d4
feat: SuppressedError 内置错误实现(三字段属性序 + 构造器接线)
2026-08-16 19:04:09 +08:00
pjh123
cde3417e15
fix: sloppy 普通函数调用 this 未定义/null 绑定全局对象
2026-08-16 16:58:32 +08:00
pjh123
a00ef2a7c6
feat: Iterator.prototype 返回迭代器方法(map/filter/take/drop/flatMap)
2026-08-16 16:38:45 +08:00
pjh123
327893043b
feat: Iterator.prototype 终端方法(forEach/every/some/find/reduce/toArray)
2026-08-16 16:02:14 +08:00
pjh123
7e180d9ac1
fix: 控制流逃出计数读越界防御,无 ext 字的返回安全降级
2026-08-16 15:02:04 +08:00
pjh123
1f2a020585
feat: Iterator helpers 基建——Symbol.dispose 注册与 %IteratorHelperPrototype%
2026-08-16 14:44:47 +08:00
pjh123
7de55b25d8
refactor: 测试断言改 assert!
2026-08-16 14:04:27 +08:00
pjh123
1a244398f1
refactor: match 可改 ? 的等价改写
2026-08-16 14:04:25 +08:00
pjh123
457b1b874d
fix: new 表达式 native 构造收口 call_function_sync 防 255/254 槽污染
2026-08-16 13:41:01 +08:00
pjh123
5df04a8e58
chore: 全仓 rustfmt 格式化归拢
2026-08-16 12:50:36 +08:00
pjh123
23a5f35ae1
fix: 闭包链式捕获越界改编译错误早暴露防静默错值
2026-08-16 12:34:14 +08:00
pjh123
82c088ac9f
fix: for-await-of 同步迭代器 return() 忽略路径补异常值槽配对
2026-08-16 12:00:59 +08:00
pjh123
16793d3b36
fix: 异常值通道配对——忽略调用槽配对、unwind 接住清槽、生成器参数初始化不覆盖异常值
2026-08-16 11:29:50 +08:00
pjh123
d237b4b70e
fix: clear_ic_caches ext 计数补登 BREAK/CONTINUE/RETURN
2026-08-16 10:43:03 +08:00
pjh123
8ac26fc01f
fix: IC 快速路径 symbol 原始值走 Symbol.prototype 链
2026-08-16 10:31:34 +08:00
pjh123
a8378694be
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
b885b672b9
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
0737ce3ef1
test262: supervise 模式回传失败类别,汇总可按根因拆分
...
子进程心跳扩展失败分类计数(类别\t计数逐行写出),supervise_window
聚合为 RunStats 而非裸三计数,父进程汇总打印 FAIL categories(与
in-process 共用 print_fail_categories)。此前子进程 stdout 被丢弃、
heartbeat 只带 pass/fail/skip,categorize_fail 在 supervise 下完全
不可用,10k+ fail 无法按 VM/parse/compile 根因拆分;现在类别基线
可数据化。超时/崩溃归入 timeout/crash 类别。
2026-08-16 02:50:29 +08:00
pjh123
2b86cd241d
test262: $262 宿主对象最小绑定 + is not defined 判定白名单化
...
引擎侧:绑定 $262 宿主对象(evalScript/global/gc 可用,detachArrayBuffer/
createRealm/agent 抛 not supported 而非 ReferenceError),并加入编译期
已知全局表;引用 $262.* 的测试从全量 skip 转为真实执行。
runner 侧:is not defined 不再一票吞 skip——解析错误消息中的标识符名,
仅在缺失全局白名单($262/structuredClone/queueMicrotask)内才按能力
缺失跳过;其余 is not defined 按真实失败计入,修复后应转 PASS 的
测试恢复可见。
2026-08-16 02:47:02 +08:00
pjh123
06441e09ff
fix: 全局构造器与内置对象属性改非枚举与规范对齐
2026-08-16 02:29:42 +08:00
pjh123
355b0233f0
fix: NEW_OBJECT 走统一分配入口登记 epoch 对象消除属性向量泄漏
2026-08-16 02:16:34 +08:00
pjh123
0c6aa7fbef
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
946c96472f
fix: object 家族 dirty 时重建迭代器绑定并对齐 Iterator.prototype,绑定幂等化避免重复槽
2026-08-16 00:25:30 +08:00
pjh123
d309379551
fix: 未声明标识符读取抛 ReferenceError(typeof 特判返回 undefined)
2026-08-16 00:10:08 +08:00
pjh123
e448c642a5
fix: 迭代器原型形状补全(Iterator.prototype/string 中继层/next 原型化)
2026-08-15 23:36:01 +08:00
pjh123
ec32e42ce5
feat: 迭代器原型基建:%IteratorPrototype% 链 + 各集合迭代器原型
...
新增 %IteratorPrototype%(含 @@iterator 返回自身,经原型链被全部迭代器
继承,it[Symbol.iterator]() === it 恒等)与 %ArrayIteratorPrototype%/
%MapIteratorPrototype%/%SetIteratorPrototype%/%StringIteratorPrototype%/
%RegExpStringIteratorPrototype%(链到 %IteratorPrototype%);Array/Map/Set/
TA/String/matchAll 迭代器包装统一挂对应原型;补 Array/String 的 @@iterator
别名绑定。集合迭代器原型不含 return 方法(规范集合迭代器无 return)。
2026-08-15 22:57:03 +08:00
pjh123
c230edeb57
feat: Function.prototype[Symbol.hasInstance] 绑定与 bound 函数构造语义
...
@@hasInstance 按 OrdinaryHasInstance 实现(非可调用 this 返回 false、
prototype 非对象抛 TypeError、bound 链递归到最内层 target);
new boundFn() 解包 [[BoundTargetFunction]] 链后转发构造:绑定实参前置、
新对象原型取 target.prototype、new.target 替换为最内层 target。
2026-08-15 22:40:45 +08:00
pjh123
3e34607380
fix: Promise.prototype.then 按构造器建派生能力支持子类
2026-08-15 22:16:05 +08:00
pjh123
07ea7e6d4f
fix: TDZ 写与 const 赋值检查补全(含闭包捕获路径)
2026-08-15 21:55:43 +08:00
pjh123
07d6c83c6b
fix: 错误对象属性枚举性、toString 标签与构造器调用语义
...
- message/name 属性改非枚举(CreateNonEnumerableDataPropertyOrThrow),
Object.keys/for-in/JSON.stringify 不再泄漏错误信息
- 新增 Error 家族对象标签,Object.prototype.toString 输出 [object Error],
含子类型与用户子类(沿原型链判定)
- Error 家族构造器补 length=1,函数调用忽略 this 一律新建对象
- JSON.stringify 序列化仅含可枚举自身属性(规范 EnumerableOwnPropertyNames)
2026-08-15 21:30:28 +08:00
pjh123
c4961fae29
feat: 二元幂运算 opcode 支持 number 与 BigInt
...
- 新增 EXP opcode(0x94)与 emit 层 Exponential 分支,二元 a ** b 不再 compile error
- dispatch_exp 与 dispatch_compound_exp 共享 exp_result:IEEE-754 powf 快路径 +
BigInt 幂(负/超 u32 指数 RangeError)+ 混合 BigInt/Number TypeError
- 复合 **= 补 BigInt 语义(此前走 f64 近似),与二元 ** 行为一致
2026-08-15 21:17:49 +08:00
pjh123
b706b8c506
feat: Object keys 系列合并数组元素区,assign 按规范过滤枚举/触发 getter
...
walk_own_keys 返回值语义改为绝对存储索引:数组对象先枚举元素区
(跳过 hole),命名属性偏移到元素区之后;shape 槽位计数含 symbol 键
与物理存储对齐(修 symbol 键错位读值)。delete_own_property /
REST / SPREAD 四连锁点同步去偏移,REST/SPREAD 删除独立元素区循环
(由 walk_own_keys 统一覆盖,防重复键)。
Object.assign 增补:源只取可枚举自身属性;取值改 ordinary_get
(accessor 触发 getter,receiver=源);提交写 receiver 修正为 target
(目标同名 setter 的 this 指向 target)。
2026-08-15 21:04:24 +08:00
pjh123
970c2e988e
feat: freeze/seal/preventExtensions 写路径拦截(逐属性 meta + extensible 检查)
...
freeze/seal 逐属性改写 meta(数据属性 writable/configurable=false,
访问器 configurable=false,含数组元素区),使 has_prop_meta() 恒 true,
IC 直写路径自动失效;ordinary_set/create_named_prop_fast/
set_or_create_prop_value/define_* 增补 extensible/frozen 检查,
SET_ELEM 直写入口回落 ordinary_set 或拒绝新元素。
引擎未实现 strict 标志,赋值失败统一 raise_type_error(sloppy 静默留待后续)。
2026-08-15 20:55:20 +08:00
pjh123
f4e790978d
fix: matchAll 空匹配推进至少一个字符,RegExp 补 GC 搬移深拷贝
...
matchAll 迭代器在空匹配(range.start == range.end)后把游标停在原位置,
同一位置反复空匹配导致死循环;改为按 UTF-8 字符边界推进(与 regress
find_iter 的 next_right_pos 一致),串尾空匹配把游标推到串长之后保证下轮
耗尽。
另修 RegExp 在 GC sweep 与 epoch 晋升中的指针别名:克隆只复制 native_fn 槽
的 Box 指针,源对象释放后克隆持悬垂指针,teardown 双重释放(heap 损坏)。
新增 clone_regexp_native 深拷贝已编译正则,sweep/promote 两处挂接,与
drop 配对保证单次释放。
2026-08-15 20:31:51 +08:00
pjh123
1c70d0343d
fix: Function.prototype.apply 解除实参上限,native 大实参集走 spill 溢出区
...
apply 曾把实参数组静默截断到 55 个(寄存器窗口限制),导致
String.fromCodePoint.apply(null, codePoints) 这类大参数集调用只取前 55 个。
改为直接物化全部实参经 TailCall 下发:字节码目标走帧参数区(spill 栈)任意
个数;native 目标新增 spill 溢出区通道,寄存器窗口(253)之外的实参转存
spill 栈(GC 根、嵌套安全),builtin 经 VmHost::native_arg_count/native_arg_at
读取,String.fromCodePoint 迁移为新接口。大实参集不再静默截断。
2026-08-15 20:31:32 +08:00
pjh123
12d1a85e44
fix: Vm 增加 Drop 收尾释放全部 session 堆数据消除逐实例泄漏
...
test262 每测试新建 Vm 直接 drop,此前对象堆数据/串/BigInt/cell 全部
泄漏。新增 teardown 收尾函数(epoch+session 对象堆数据、串、BigInt、
cell 统一释放)供 full_reset 与 Drop 共用。连带补齐 promote 分支的
ArrayBuffer 字节缓冲深拷贝(与 sweep 对齐,消除共享所有权 double-free),
并修正依赖旧泄漏行为跨 Vm 解析字符串的 error 测试。
2026-08-15 19:13:51 +08:00
pjh123
d97d39e8ad
fix: 生成器状态盒深拷贝消除 sweep/promote 共享所有权 UAF,full_reset 补释放 session 堆数据
...
GeneratorState 状态盒此前由 epoch 原对象独占释放,promote 与 sweep 克隆
浅拷贝 native_data 共享同一盒,旧对象 drop 即悬垂。新增 clone 深拷贝
(参照 async_generator),promote/sweep 两处接入,恢复执行读新盒;
full_reset 在 session arena 重置前遍历 session 对象释放堆数据,
配合深拷贝形成单所有权。补 sweep/promote/full_reset 三回归与
生成器捕获闭包跨 GC 回归。
2026-08-15 19:02:39 +08:00
pjh123
e718394072
fix: full_reset 存在 session 对象时强制重建 global 堵池路径 UAF
...
覆盖既有 global 槽的写入不递增 generation,脏检测漏判导致保留的
global 持有已释放的 session 对象指针。session 对象非空即强制 bump
global generation,借既有快照机制触发重建。
2026-08-15 18:56:25 +08:00
pjh123
13e9ee3543
fix: upvalue cell 改独立堆分配消除 GC sweep 后悬垂
...
upvalue cell 原先分配于 session_epoch bump arena,对象 sweep 替换 arena
后旧 Bump drop,全部闭包 cell 悬垂:后续分配复用其内存导致 upvalue 值
被覆盖(私有字段 brand 检查跨语句误报、release 下可致 SIGSEGV)。
cell 改为 Box::into_raw 独立堆分配并登记进 session_cell_ptrs 追踪表,
与 arena 生命周期解耦:sweep 搬移对象时 cell 指针稳定,只重写
cell.value 中的对象引用;full_reset 统一释放,无 double-free。
2026-08-15 18:50:07 +08:00
pjh123
3d1ece321b
perf: typeof 改 js_type 单次提取并复用进程级静态字符串消除每次分配
2026-08-15 16:09:19 +08:00
pjh123
3c9e33f227
perf: 模板字面量字符串段借用直写并消除末尾克隆
2026-08-15 15:10:23 +08:00
pjh123
1f8cf449ad
fix: generator resume 错误路径归还 native_call_depth 防执行期 GC 永久跳过
2026-08-15 14:53:07 +08:00