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
|
41a3aef29e
|
fix: CREATE_CLOSURE 跨 run 帧按执行帧表代际解析——嵌套闭包错代盖写闭合,挂起恢复重设活跃代际,OOB 消息上界对齐实际查表代际
|
2026-09-12 22:04:42 +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
|
44c16cab8a
|
fix: 顶层 var 读写直连全局对象属性单一真值——GDI 序言 + 声明处同步删除,类原型 session 直分防晋升克隆 identity 分裂,自增减 int 保持
|
2026-09-12 15:48:32 +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
|
390b72e3bd
|
perf: 执行期 GC 收集——扩展 mark 跟随 epoch 臂、活 epoch 对象晋升 session(克隆体置活防同轮原地 sweep 误放)、死 session 对象原地释放出表,for-in 门控(活跃迭代器 + 挂起状态盒)与分配包络水位触发
|
2026-09-12 00:25:56 +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
|
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
|
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 |
|
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
|
479238dc24
|
fix: 函数对象(含 prototype 子对象)直接 session arena 分配——逃逸写不再克隆分裂 identity,类原型/super 派发完整,epoch 边界前 session 原地晋升 epoch 子引用防悬垂
|
2026-09-10 01:52:29 +08: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
|
469ef7543b
|
perf: GC 字节账目补齐 + is_epoch_ptr O(1) + 分配热路径触发
|
2026-08-22 08:10:32 +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
|
3df08dddff
|
fix: object 家族 dirty 时重建迭代器绑定并对齐 Iterator.prototype,绑定幂等化避免重复槽
|
2026-08-16 00:25:30 +08:00 |
|
pjh123
|
3a40024e99
|
fix: Promise.prototype.then 按构造器建派生能力支持子类
|
2026-08-15 22:16:05 +08:00 |
|
pjh123
|
cec7d04b86
|
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
|
18aaa0fb0f
|
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
|
9e8ee96491
|
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
|
4373b88303
|
fix: full_reset 存在 session 对象时强制重建 global 堵池路径 UAF
覆盖既有 global 槽的写入不递增 generation,脏检测漏判导致保留的
global 持有已释放的 session 对象指针。session 对象非空即强制 bump
global generation,借既有快照机制触发重建。
|
2026-08-15 18:56:25 +08:00 |
|
pjh123
|
f81b7bca46
|
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
|
350b65c091
|
perf: 字符串 +/+= 二元拼接改 Cons rope 惰性扁平化消除 O(n²)
JsString 拆 Flat/Cons 变体:Cons 经独立 ConsNode 保存左右子节点 + O(1)
字节长 + 惰性扁平化产物缓存(OnceLock 原子发布,产物挂节点生命周期)。
concat_strings 接线:总长 ≤ 128B 的小链急切扁平(与 rope 前同款,拼接即
消费场景零开销),大链 O(1) 链接——大段重复拼接从 O(n²) 拷贝降为 O(n)
链接,文本在消费点(.length/==/string_ref/方法族)首次扁平化后缓存。
GC 兼容:mark 收口 mark_string_live 传播 Cons 子节点与产物闭包(显式栈
防深链爆栈);sweep/full_reset 共用 drop 辅助连带释放产物;节点字节记账
用 O(1) byte_len。rope 节点登记 session 字符串表,与执行期字符串 GC
(指令边界触发)天然兼容。JsString 结构 32B 与 rope 前同 bin,小串路径
零结构回退;unsafe impl Send/Sync 论证同 StringPtr(perm 恒 Flat)。
|
2026-08-15 14:32:08 +08:00 |
|
pjh123
|
a0788b363b
|
fix: 执行期字符串 GC 触发点移到指令边界,消除 builtin 局部活串悬垂
分配点触发会把仅存于 builtin 函数栈上局部 JsValue 与构造中未登记对象的
存活串判死释放(temporal 槽、regexp exec 构造中数组、replace 回调参数
Vec),长会话超阈值即悬垂。触发改在 dispatch 指令边界,此时所有局部值已
落地为执行根;分配点只留账目。水位采用上次收集存活字节加阈值增量,活串
超阈值时不会每指令重复白跑;reset 完整收集仍按阈值直接比较。debug 构建下
收集后断言存活对象字符串边已登记。补低阈值回归:regexp exec 旧行为直接
SIGABRT,temporal 与 replace 结果断言守护。
|
2026-08-15 13:20:04 +08:00 |
|
pjh123
|
354ab2f192
|
perf: 执行期 session 字符串 GC 阈值回收(超 32MiB 触发,跳过对象 sweep)
new_string_owned 分配前做廉价阈值检查(1 次 usize 比较 + 阈值读取),
超 session_gc_threshold 即调 collect_strings_only:clear_all_marks →
完整 mark(现成)→ sweep_session_strings(现成),跳过对象 sweep 搬移,
builtin 层对象裸指针跨分配点零悬垂面。触发检查在登记之前——返回值
尚未根化,登记后回收会被本次 GC 判死致悬垂。分配前触发亦使 GC 期间
新串仍在栈上未登记,天然安全。
长循环字符串累积场景(REPL 常驻 / test262 长测试 / kernel_batch 复用)
session 内存从无界变为有界(≤ 阈值 + 存活串);bench gc_trigger_count
恢复有效(string_build 由 0 → 2 次触发)。07.2 rope 死节点回收依赖本机制。
|
2026-08-15 12:12:03 +08:00 |
|
pjh123
|
ee4a12668f
|
perf: 数组元素访问 dispatch 内联 fast path + length_si 缓存
GET_PROP_DYNAMIC/SET_PROP_DYNAMIC 开头内联数组元素 fast path:整数键 +
真数组 + 无元素 meta + 界内时直读/直写元素区,免 primitive_property_get /
ordinary_get/set 调用链与 __proto__ 每次 RwLock 查询;越界与有 meta
场景回退原路径(CreateDataProperty + length 扩展 / accessor/hole 协议)。
GET 侧 is_object() 快检先于 checked_object_ptr,保持原始值 receiver
不抛错。length_si 缓存为 Vm 字段(builtin 绑定后取 id,稳定非 0),
普通属性路径 5 处 hot spot 改读缓存,消除每次 intern 的共享锁开销。
|
2026-08-15 04:58:57 +08:00 |
|
pjh123
|
e07bf2fbe9
|
test: full_reset 后跨家族方法调用回归防线覆盖 call/apply/bind 路径
|
2026-08-14 22:01:03 +08:00 |
|
pjh123
|
57a3148d77
|
perf: 数组回调字节码调用改寄存器窗口复用减少搬移
|
2026-08-13 20:11:09 +08:00 |
|
pjh123
|
1824ef0df1
|
feat: num-bigint 接入任意精度 BigInt(字面量、算术、toString、asIntN/asUintN)
|
2026-08-12 03:15:18 +08:00 |
|
pjh123
|
078688070d
|
feat: 实现最小 BigInt 子集(字面量/算术/比较/构造器,Temporal 前置)
|
2026-08-10 23:02:31 +08:00 |
|
pjh123
|
9fa8ae5b5f
|
perf: 字符串拼接按操作数字节长预分配容量,免几何 realloc 二次拷贝
|
2026-08-10 17:40:39 +08:00 |
|
pjh123
|
7efb26bc96
|
perf: 函数调用 bytecode 改 Arc 共享(O(1) 帧切换 + IC 写时复制)
|
2026-08-10 15:08:51 +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
|
5a9a46483d
|
feat: Promise 静态方法(all/race/allSettled/any + AggregateError)+ async test262 解锁
- Promise.all/race/allSettled/any:共享聚合核心,逐元素 C.resolve + Invoke(then),
共享记录对象承载剩余计数/结果数组/能力闭包,元素处理器按模式结算
- AggregateError 内建(构造器 + prototype,Promise.any 拒绝路径依赖)
- 修复 capability_executor:能力已持有非 undefined 值时二次调用抛 TypeError
- test262 runner:移除 async flag 无条件 skip;解锁 asyncHelpers/promiseHelper/
doneprintHandle harness;注入 print 捕获 + ,run() 后按 marker 判定
- 排除 await-dictionary(Promise.allKeyed/allSettledKeyed 2025 proposal)特性
- iterator 遍历辅助改 pub 供 oxide_vm 复用
|
2026-08-09 23:25:36 +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
|
464712f7ba
|
feat: 实现 yield* 委托语法(内层迭代器 next/return/throw 转发)
|
2026-08-09 20:00:16 +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
|
cd214069cd
|
fix: try/finally 支持 break/continue/return 穿越 finally(completion 机制)
|
2026-08-08 12:38:25 +08:00 |
|
pjh123
|
d186c4d9f2
|
feat: Function 构造器(动态编译字符串生成函数)
|
2026-08-08 03:07:26 +08:00 |
|
pjh123
|
bfcf132d73
|
feat: arguments 对象绑定(CREATE_ARGUMENTS + 帧实参 spill 区)
|
2026-08-08 00:01:22 +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 |
|