Commit Graph

481 Commits

Author SHA1 Message Date
pjh123 68d2974eb5 kernel/builtins/test262: 本批新码 clippy 三则 + fmt 归净——obfuscated_if_else(source_escape_to_key 值域判定改 if/else)、needless_range_loop(decode_uri_units 保留字符原样段改 extend_from_slice)、needless_borrows_for_generic_args(844f2f4 rename 调用两处冗余借用);fmt 漂移(compiler.rs/vm.rs 构造体折行)一并归净。七 crate clippy 零告警、fmt --check 净、七 crate 2879/1(唯一失败 compile_class_declaration 既有)、release 子集 8/8 + 2/2 终验 2026-09-14 08:18:38 +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 3acac721b0 types/kernel/vm/builtins: JsString UTF-16 载荷层(FlatU16 变体 + 单元入口)——原 UTF-8 载荷只存 well-formed 串、孤立 surrogate lossy 转 U+FFFD 回写,FromCodePoint/属性转义与字符串面码点语义皆破;现载荷直存 [u64;3](Flat well-formed / FlatU16 单元序列 / Cons 拼接),utf16_len 独立 32 位字,32B 布局锚保持;from_units 智能路由(含孤立→FlatU16),as_str 仅限 Flat,units/units_borrowed 单元借用,as_lossy_str 宽容读;string_forge 编解码 surrogate 感知(孤立 surrogate 逃逸 hex4 编码、解码展开 astral 代理对、string_ptr 由单元物化);VmHost 单元物化/分配/查询入口 + runtime_api 单元 API;字符串内置全法单元化(charAt/slice/substr/split/replace/search/match/matchAll 单元定位;空模式边界:search→0、match→[""]、replace 插 0 位、matchAll 游标耗尽守卫;接收者 ToString 错误原样传播);正则内置单元化(exec/test/search/symbol_* 单元文本,替换串 \u{...} 与孤立 surrogate 文本处理,lastIndex 与 matchAll 游标单元化);字符串迭代器码点化(高代理+后续低代理成对产出,astral 值回真实码点);String(Symbol) 抛 TypeError;回归钉更新五处(charAt/split/slice/substr 单元精确语义 + dispose 钉改 TypeError 断言);四 crate 全绿(oxide_vm 98 套件 2403 测)+ clippy/fmt 零新增 2026-09-13 22:42:10 +00:00
pjh123 650b8c00cc builtins/vm: ZDT 直读 5 方法绑定(toInstant/toPlainDate/toPlainDateTime/toPlainTime/startOfDay)——纪元槽直读零时区换算、本地分量经 plain_parts 换算、startOfDay 当地午夜含范围校验,ZDT 语料 45 文件 fail→pass 2026-09-13 17:06:10 +00:00
pjh123 699059aee5 emit/vm: delete 全局可写内置标识符真删属性并清镜像槽——新增 DELETE_GLOBAL_PROP_C,可删名集自可写划分单源派生(除 globalThis 与宿主名),test262 delete JSON 用例由红转绿 2026-09-13 12:26:01 +00:00
pjh123 50674ee4f5 builtins/vm: matchAll 编译正则载体专型标签,释放/深拷贝经 RegExp 同一守卫,止逐调用 Box 泄漏 2026-09-13 11:05:52 +00:00
pjh123 1fd3bbf9e0 test: promise 结算值与挂起帧 BigInt 唯一引用 unit 级确定钉——完整收集后仍登记 session 表 2026-09-13 09:05:57 +00:00
pjh123 41a3aef29e fix: CREATE_CLOSURE 跨 run 帧按执行帧表代际解析——嵌套闭包错代盖写闭合,挂起恢复重设活跃代际,OOB 消息上界对齐实际查表代际 2026-09-12 22:04:42 +00:00
pjh123 bf08803071 fix: 顶层 var 声明带初始化撞不可写全局用户属性 strict 抛 TypeError——用户名声明处写点改 session 解析 PutValue 语义,builtin 名保 GDI 写点;序言缺失分支全局不可扩展两模式对齐抛 TypeError 2026-09-12 21:36:10 +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 473f73a1f6 fix: 原生盒 mark 边收集去对象预过滤——盒内字符串/BigInt 边并入 live 标记闭合 sweep 悬垂 2026-09-12 18:10:03 +00:00
pjh123 e368751f59 fix: 晋升 Promise 克隆迁移原件 reactions 并接结算链——in-run collect 后结算走克隆引用时原件侧消费者永久丢失洞闭合 2026-09-12 17:22:51 +00:00
pjh123 44c16cab8a fix: 顶层 var 读写直连全局对象属性单一真值——GDI 序言 + 声明处同步删除,类原型 session 直分防晋升克隆 identity 分裂,自增减 int 保持 2026-09-12 15:48:32 +00:00
pjh123 4b807b5b90 fix: 晋升 Promise 的结算传导到克隆——原件 fulfill/reject 时同步结算克隆
顶层 var 读侧引用晋升克隆,而原件随 epoch 释放;此前克隆是 pending 态静态
副本,原件结算不传导,克隆排队反应永不触发(表现为存 pending Promise 的顶层
var 后续 then 悬挂)。clone 时不再复制反应(原件结算自带触发,避免双触发),
pending 原件记克隆指针,fulfill/reject 结算后传导到克隆。
2026-09-12 12:05:55 +00:00
pjh123 e520b0dd93 fix: full reset 清空未捕获异常侧通道(跨 epoch 残留悬垂)
clear_execution_state 漏清 last_uncaught_value:原生错误后残留的原值
持 epoch 对象指针,reset/full_reset 的池回收后悬垂,后续原生错误经
raise_call_error 消费残留值即 UAF。侧通道属执行期状态,随异常状态一并
清空;补 reset/full_reset 两边界钉。
2026-09-12 08:27:42 +00:00
pjh123 8f1be23c04 feat: Temporal.PlainYearMonth until/since——year/month 单位差值(缺省 smallest month / largest year)、参考日三元全等早返与按日 1 的 day 级范围 2026-09-12 07:24:33 +00:00
pjh123 6c9dbdaa06 feat: Temporal.PlainYearMonth with/toPlainDate——字段 bag 覆盖(month→monthCode→year)、monthCode 两段校验与 day 级日期合成 2026-09-12 07:24:28 +00:00
pjh123 db0521f950 feat: Temporal.PlainYearMonth add/subtract——时长转换复用、低阶单位拒绝与按日 1 的 (年,月) 范围 2026-09-12 06:51:10 +00:00
pjh123 32cfc066f1 feat: Temporal.PlainYearMonth compare/equals——(年,月,参考日) 三元比较与 ToTemporalYearMonth 共享件 2026-09-12 05:51:03 +00:00
pjh123 4dc475d2fa feat: Temporal.PlainYearMonth.from——年-月串解析/字段 bag/实例复制与 (年,月) 范围 2026-09-12 05:38:24 +00:00
pjh123 5362595b17 feat: Temporal.PlainMonthDay equals/with/toPlainDate——三元比较、字段覆盖与 constrain 日期合成 2026-09-12 04:52:28 +00:00
pjh123 2fcae4fbca feat: Temporal.PlainMonthDay.from——ISO 串解析/字段 bag/实例复制与 overflow 语义 2026-09-12 04:23:44 +00:00
pjh123 e4e278dd19 feat: PlainMonthDay/PlainYearMonth toLocaleString(默认形串)与 valueOf(TypeError)绑定 2026-09-12 03:49:18 +00:00
pjh123 e33e7a1eb7 feat: PlainMonthDay/PlainYearMonth 对象地基——构造器/getter/toString/toJSON 注册与 BuiltinWorld 接线 2026-09-12 03:42:48 +00:00
pjh123 390b72e3bd perf: 执行期 GC 收集——扩展 mark 跟随 epoch 臂、活 epoch 对象晋升 session(克隆体置活防同轮原地 sweep 误放)、死 session 对象原地释放出表,for-in 门控(活跃迭代器 + 挂起状态盒)与分配包络水位触发 2026-09-12 00:25:56 +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 542236a15a fix: clear_transient 补清 overflow 态(id 空间完整复位)+ kernel 增加 active_vms 计数,sweep/重建/kernel-drop 三处 debug_assert 守卫'清空时点无存活 VM' 2026-09-11 21:42:55 +00:00
pjh123 a6f9a018f7 chore: rustfmt vm_support.rs 格式残留 2026-09-11 21:06:59 +00:00
pjh123 4c3ac707f7 fix: 直 session 分配站(函数对象/prototype 子对象/标签模板数组)补 session 堆账目,配单 run 分配包络高水位 O(1) 采样锚与执行期 churn 峰值校准用例 2026-09-11 19:44:07 +00:00
pjh123 ad0405fe51 fix: full_reset/run 边界换新 Bump 替代原地 reset——旧 epoch/session arena 全量归还系统分配器、容量不跨 reset 保留,配 arena 保留锚校准用例 2026-09-11 19:43:55 +00:00
pjh123 487c6a9559 fix: sweep 死对象分支释放死闭包 upvalue 列表 Box(死对象不克隆、Box 独占,恰好一次释放后置空防收尾双放),配 mem_closure_dead_leak RSS 斜率校准用例 2026-09-11 18:32:43 +00:00
pjh123 b17119ce16 fix: 脏重建方法 wrapper/构造器/global 槽跨轮复用迁移——FnWrapperKey 四分件键(加 label 消解同名原型 next/return/throw 碰撞)登记表继承止 S2 每轮 wrapper 无界累积,global 槽原位更新堵住旧构造器滞留 UAF 与每轮 +3 槽无界增长 2026-09-11 18:06:19 +00:00
pjh123 4095ad2c1d fix: JS 重入边界 hop 计数每 64 跳强制顶层分配上限采样——堵 native 泵送小重入双上限结构性永不采样盲区 2026-09-11 16:29:38 +00:00
pjh123 ee32b2c682 fix: 选择性重建收尾重指保留对象 proto 槽并恰好释放一次被替换旧 P 对象属性区——含保活钉住对属性区,本体钉保留作重指遗漏兜底 2026-09-11 13:34:47 +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 54f99a292b fix: 深采样重算与手工堆账目双计——run_alloc_bytes_full base 只取 arena 计数器 2026-09-11 08:54:03 +00:00
pjh123 b13a379bda doc: 晋升方法补执行外安全点前提注记;基线口径注明 peak 采样点与盲区 2026-09-11 05:54:22 +00:00
pjh123 227dfe008f fix: test262 runner 进程 RSS 无界增长——session 收尾统一释放内建裸堆区/upvalue 别名 + 每测试分配上限 256MiB(任务 116)
- 泄漏修复:KernelSession 收尾(teardown_intrinsic_protos/free_session_upvalues)
  释放内建对象 Box::into_raw 裸堆区(release_raw_heap 四区置空幂等)与
  session upvalue 原件/晋升克隆别名去重释放;bindings 原生盒负载边、
  session_gc 边记录、vm_props 属性区同步收尾
- 失控测试封顶:runner kernel max_alloc_bytes=256MiB(dispatch 采样口径
  run_alloc_bytes/run_alloc_bytes_full),超限计 memory-limit 失败而非拖垮
  进程 RSS(arena 高水位 GB 级 × 多 worker = 宿主 OOM)
- 归属:RSS 泄漏 pre-existing(HEAD 无 WIP 同现);identifiers escaped
  unicode 挂死族另立 B132(pre-existing,supervise 超时自愈)
- 验证:build/clippy/四 crate 测试全绿零新增告警;language 前 5000 测试
  单窗峰值 330MB(旧 ~4.5MB/测试 单调增长→88GB OOM 签名消失),
  窗口间峰值 0.17-1.6GB 有界、逐测试释放回基线
2026-09-11 03:55:59 +00:00
pjh123 a5258f2739 fix: intrinsic ctor prototype 属性指向 P 槽唯一实例——消除 Box 释放悬垂与实例 [[Prototype]] identity 分裂 2026-09-11 02:02:41 +00:00
root 81f05b49a2 fix: debug-only 字符串边记录函数加 cfg 门,消除 release 死代码告警 2026-09-10 08:21:43 +00:00
root 1b87e212f9 test: 新增内存占用基准用例与留存内存采集
bench 每轮采集在 workload 后 promote 根持有/会话引用的 epoch 对象并强制
一次 full GC,新增 peak_bytes / retained_bytes / retained_objects 三口径
(原 session_* 字段为执行期累计分配,不反映 workload 后留存);dispatch
循环增加 session 堆高水位采样,VM 暴露 session_bytes_peak 与
collect_session_gc。新增 8 个 mem_* 压力用例(对象图/字符串/闭包链/数组
增删/跨调用保留/Map/Set 保留/字符串拼接),基线扩至 76 条目。
2026-09-10 08:18:52 +00:00
pjh123 1f37c4c9e6 fix: 全局 var 绑定 0x6F 按 CreateGlobalVarBinding 不更新既有不可写数据描述符,for-in 枚举断言修运算符优先级括号化 2026-09-10 05:55:03 +08:00
pjh123 c87edd404a fix: 全局三常量描述符翻可配置,var 重复声明以 builtin 镜像值保留现存值 2026-09-10 04:16:08 +08:00
pjh123 479238dc24 fix: 函数对象(含 prototype 子对象)直接 session arena 分配——逃逸写不再克隆分裂 identity,类原型/super 派发完整,epoch 边界前 session 原地晋升 epoch 子引用防悬垂 2026-09-10 01:52:29 +08:00
pjh123 3f393b6acb fix: eval 脚本 var 声明落全局 configurable:true——is_eval_script 穿透 2026-09-09 19:17:57 +08:00
pjh123 d9c2847730 fix: sloppy 未声明写隐式全局创建 + strict ReferenceError——DEFINE_GLOBAL_PROP_C 0x98 2026-09-09 18:44:38 +08:00
pjh123 c8bcff83f6 fix: sloppy 模式属性赋值静默 no-op——写失败按写方严格模式分派,内置写路径一律按严格 2026-09-09 17:48:33 +08:00
pjh123 64f582d34b chore: rustfmt 全量格式化——CI fmt check 差异清零 2026-09-09 15:14:57 +08:00