pjh123
ff129d626f
fix: member 复合写数组 length 分流 ordinary_set 防影子槽绕过 ArraySetLength
2026-08-15 09:17:03 +08:00
pjh123
9b2e33916a
perf: CONCAT_N 多操作数拼接单趟精确预分配替代逐次 ADD
...
新增 CONCAT_N opcode(0x93):连续加号左结合链摊平为单条指令,
字符串模式单趟精确总长预分配,消除 N-2 次中间串分配与逐次整串重拷贝。
- emit 只下钻 left 链、right 括号不拆(a+(b+c) 退化 ADD),求值序与
f64 结合性保持左结合原义;摊平上限 14 防超长链寄存器压力
- dispatch 两阶段:数值前缀逐项复用 ADD 判定序列(int 溢出升 double、
BigInt 混合 TypeError、对象 ToPrimitive 副作用序),遇字符串转入
字符串模式单趟预分配拼接(concat_n_strings)
- RegAlloc graph/rewrite 登记 CONCAT_N ext 操作数(漏收集即错值);
ic_helper ext_word_count 登记(clear_ic_caches 字节定位)
- contract golden 显式 CONCAT_N 分支(规避 canonical_inst _ 兜底)
2026-08-15 09:08:05 +08:00
pjh123
f8dacb192a
perf: member 复合写路径接入 IC 写命中(depth 0)消除每次 DashMap 查询与回写
...
set_member_prop 增加 ic_set_hit_own(仅接受 depth==0 槽,跳过读侧学习的
原型条目防原型污染)命中直写槽,ext_pc 由 read_member_prop 显式带出消除
隐式 pc 契约;写新属性 miss 分支(IC_SET 分发 + member 写)统一改
CreateDataProperty 快路径(保留原型链 setter/readonly 检查),砍掉
ordinary_set 全链路的重复查询与 shape 转换开销。
2026-08-15 08:16:49 +08:00
pjh123
31ca1dd5db
fix: finally 体直落进入时置位 finally_active 防完成穿越计数错乱
...
catch 体正常结束后指令直落入 finally 体,此前 finally_active 未被置位,
finally 内 break/continue/return/throw 触发未进入分支导致 finally 体重复
执行、完成计数错乱。新增无操作数标记指令 TRY_FINALLY_ENTER,在 finally
体入口统一置位栈顶 handler 的 finally_active,覆盖 JMP/直落/unwind/完成
穿越/挂起恢复全部进入路径,并删除 control_flow.rs 中对跳转目标匹配的
脆弱栈顶检测。
2026-08-15 07:47:54 +08:00
pjh123
ed964b5e2b
test: IC 多态 primitive receiver 断言(扩展字跳越无错位)
2026-08-15 06:40:57 +08:00
pjh123
b62348eb5d
perf: IC 多态化 4 槽缓存(FIFO 滚动写回)消除多态场景 miss 重解析
...
每条 IC 指令扩展字 3→8(4 槽 × [shape_id|proto_depth, slot]),命中槽 0
单态快路径零额外成本,槽 1..3 懒解码遍历,miss 写回 FIFO 滚动(新条目进
槽 0、最老丢弃)。修复原型链 IC 深度解析多走一步与 prop_forge 模板不匹配
不写回两个使缓存恒失效的问题。ic_cache 基准命中率 34.8%→78.9%,
耗时 -29%;单态 prop_access 因扩展字布局膨胀有 ~20% 取指回归(后续
side-table 方案可根除)。
2026-08-15 06:40:19 +08:00
pjh123
96da78e817
fix: inline 回调抛原始异常值时 catch 保留原值不再包装成 Error
...
dispatch_native_call 的 NativeResult::Err 分支此前把非对象异常值
(用户 throw 的数字/字符串/null/undefined/false)包装成 Error 对象,
违反 ECMAScript throw 任意值语义:catch 应收到原始值。raise_call_error
与 TailCall 分支已通过 last_uncaught_value 保留原值,此处为唯一不一致点。
统一为原样保留异常值,并补数组回调/嵌套 inline/finally 组合回归测试。
2026-08-15 05:49:59 +08:00
pjh123
40ee642622
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
b860fdf5ee
fix: string.search 无参调用越界 panic,参数读取守卫前置返回 -1
2026-08-15 04:28:01 +08:00
pjh123
6c9b8419c7
fix: property_key_si 对象与兜底原始值键统一走字符串键规范化
...
对象经 ToPrimitive 转字符串后直接 intern 绕过 canonical_index_of,产生
与整数键区间分裂的字符串键(o[{toString(){return "5"}}] 与 o[5] 不同
键);bigint 等兜底原始值键同病。统一经 string_key_si 规范化:规范数字
串映射整数键,其余 intern,与字符串分支及 03.1 各建键入口口径一致。
补回归:对象 ToPropertyKey 数字串键与 o[5]/o["5"] 键等价(读写双向)、
o[5n] 与 o[5]/o["5"] 键等价。
2026-08-15 04:20:26 +08:00
pjh123
17ee852ced
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
b82fe9af32
fix: 对象建键入口统一走 property_key_si 规范化,数字键不再分裂
...
Object.fromEntries/JSON.parse/new Map 对象 entry/rest 解构静态 excluded
四处直接 intern 动态字符串键绕过整数键区间映射,规范数字键分裂为
字符串键与整数键两个键。统一经 string_key_si 规范化:规范数字串映射
整数键,其余 intern 字符串键,与 property_key_si 字符串分支口径一致。
make_int_key 增加 debug 断言兜底索引越界。
2026-08-14 22:37:46 +08:00
pjh123
540153030b
test: full_reset 后跨家族方法调用回归防线覆盖 call/apply/bind 路径
2026-08-14 22:01:03 +08:00
pjh123
27dad8db2a
fix: session_gc sweep 测试改读 rewrite 后新指针消除 UAF
2026-08-14 21:54:48 +08:00
pjh123
57f8a474fa
fix: replaceAll 类正则对象统一走 ToString 文本路径与 replace 对齐
2026-08-14 21:15:00 +08:00
pjh123
f7866585d1
perf: replace 函数 replacer 回调免每匹配整串复制
...
回调第 4 参(原字符串)由每匹配复制整串改为调用方预构一次:
原始字符串 receiver 直接复用原值零拷贝,对象 receiver 提升为单次会话串。
覆盖 String.prototype.replace/replaceAll 与 RegExp.prototype[Symbol.replace]
的函数 replacer 路径。补回调第 4 参断言测试与 fn-replacer 压测。
2026-08-14 21:00:43 +08:00
pjh123
bd9b981362
perf: replace 字符串 pattern 走共享借用零拷贝并修 replace 语义
2026-08-14 12:54:27 +08:00
pjh123
e1747ca560
perf: ASCII 单字符缓存 + 字符串迭代器游标收尾
2026-08-14 12:11:54 +08:00
pjh123
02dabbb845
fix: 计算成员复合赋值保规范求值序
2026-08-14 11:41:50 +08:00
pjh123
c2aea3f8e9
fix: split 分隔符为 RegExp 子类对象时按字符串语义切分
2026-08-14 10:44:23 +08:00
pjh123
1a62af5485
perf: 常量字符串键计算成员折叠走 IC 静态路径
2026-08-14 10:20:32 +08:00
pjh123
7f7a8c3b66
test: 数值断言容忍 int 表示,类私有字段 for-in 用例补公有字段
2026-08-14 06:14:38 +08:00
pjh123
28c8fe0284
fix: 访问器属性合并定义时继承未提供半边,防 get/set 互相覆盖
2026-08-14 06:14:38 +08:00
pjh123
7799ebb055
chore: 清理 oxide_vm clippy 告警
2026-08-14 05:26:46 +08:00
pjh123
12ebdb8c0e
perf: 对象字面量批量构造键序预建 shape
2026-08-14 04:47:15 +08:00
pjh123
4245074d97
perf: 原生回调寄存器保存改前缀窗口减少搬移
2026-08-13 21:32:34 +08:00
pjh123
fccf2063f1
perf: 数组回调字节码调用改寄存器窗口复用减少搬移
2026-08-13 20:11:09 +08:00
pjh123
1ea9c76ab4
perf: 数组迭代方法元素读取走密集直读快路径
2026-08-13 18:12:49 +08:00
pjh123
2c62830a1d
perf: 数组整数键走独立 si 区间免字符串往返
2026-08-13 17:47:55 +08:00
pjh123
e62bc54f08
perf: 收紧字符串借用语义消除跨分配点 UB
2026-08-13 16:24:00 +08:00
pjh123
352f3359cd
perf: 属性键解析移出 IC 命中路径
2026-08-13 15:54:46 +08:00
pjh123
3ae2f2d9b7
perf: new_string_owned 零拷贝路径替代 new_string 二次克隆(B2)
2026-08-13 14:55:08 +08:00
pjh123
5513f0e2fb
perf: parse_js_number 去 lowercase 分配 + int32 位运算直取(B2/B6)
2026-08-13 14:48:19 +08:00
pjh123
f874850bf7
perf: 算术运算 int 结果保 int + double 快路径(B1/B3)
2026-08-13 14:44:24 +08:00
爱特每羊队
f8a4bacfec
fix: accessor getter 调用异常经 raise_call_error 走 unwind(JS try/catch 可捕获,此前逃逸)
2026-08-12 17:55:58 +08:00
爱特每羊队
4303462d19
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
爱特每羊队
86a20fa1fe
fix: class 类名绑定经 dedicated cell 捕获(C===Cv 恒等)+ upvalue 写入 const guard(getter 赋值抛 TypeError)
2026-08-12 17:30:28 +08:00
爱特每羊队
5e38623fee
feat: Temporal.Duration.prototype.round(无日历单位路径:选项校验+24h 天舍入+按最大单位平衡,绑定注册)
2026-08-12 16:16:22 +08:00
爱特每羊队
ad547d5cd8
feat: Temporal.Duration.prototype.add(分量精确求和+按最大单位平衡+范围校验,绑定注册);add 子集 32/0
2026-08-12 14:50:13 +08:00
爱特每羊队
fe79eff172
fix: Temporal 构造器补 length 自有属性(Instant/ZonedDateTime/PlainDate/PlainTime/Duration 按规范 arity)
2026-08-12 14:37:31 +08:00
爱特每羊队
0cd98084da
feat: Temporal.PlainDateTime.prototype.equals(实例/字符串/对象/ZDT 统一比较,绑定注册)
2026-08-12 14:27:25 +08:00
爱特每羊队
1a4663dcab
fix: class 方法/访问器/constructor/prototype 属性描述符(非枚举/只读),新增 DEFINE_PROP_ATTRS/DEFINE_ACCESSOR_ATTRS
...
- opcode.rs/inst.rs/contract.rs/vm.rs/vm_dispatch_ctrl.rs:新增两个带 attrs 扩展字的 define 指令
(attrs bit0=writable, bit1=enumerable, bit2=configurable,与 PropAttributes 一致)
- class/method.rs:方法与非计算访问器改按规范非枚举安装(DefineMethod 语义)
- class/prototype.rs:proto.constructor 非枚举;ctor.prototype 三标志全 false(MakeConstructor)
- 效果:language/statements/class 1782 pass/948 fail -> 1910 pass/716 fail(+128/-232)
2026-08-12 14:11:02 +08:00
爱特每羊队
cc78e6b28f
fix: ArraySetLength 收缩遇不可配置元素静默失败、ToPrimitive 异常透传与既有属性描述符缺省回填
...
- arr.length 收缩时若 [newLen, oldLen) 内存在不可配置元素,整个收缩失败且不做任何修改(sloppy 赋值静默 no-op),不再抛错或截断
- length 赋值 ToPrimitive(valueOf/toString)抛错时按主 dispatch 约定直接返回,避免二次抛 RangeError 覆盖原异常(S15.4.5.1_A1.3_T2)
- Object.defineProperty/defineProperties/create 对已有属性省略描述符字段时保持现有属性值(无显式 meta 按 DEFAULT_DATA 回填),修复 toReversed/toSorted/toSpliced/with length-decreased-while-iterating
2026-08-12 13:07:32 +08:00
爱特每羊队
dc023b2637
fix: 数组 length 赋值 ArraySetLength 语义与超长逻辑长度(a.length 读取/收缩校验/空洞同步)
2026-08-12 12:52:02 +08:00
爱特每羊队
3e61b573db
feat: 新增 Symbol.species well-known symbol 绑定(Symbol.species 解析/键槽/内建对象)
2026-08-12 12:50:53 +08:00
爱特每羊队
291250f3e6
feat: BigInt bitwise operators with ToNumeric semantics
2026-08-12 11:27:50 +08:00
爱特每羊队
ee9a9e12b8
fix: object-to-primitive conversion errors propagate through native builtins
2026-08-12 11:27:40 +08:00
爱特每羊队
c4fda0f883
engine: ToPropertyKey via ToPrimitive, Symbol keys/description, catchable conversion errors
2026-08-12 09:59:56 +08:00
爱特每羊队
18eb6ef8ab
feat: add Array entries/keys/findLastIndex/toSorted/toReversed/toSpliced/with
2026-08-12 03:42:42 +08:00
爱特每羊队
998327aa7e
feat: BigInt.prototype[Symbol.toStringTag] = "BigInt"
...
Adds the well-known @@toStringTag data property (writable:false,
enumerable:false, configurable:true) so Object.prototype.toString and
property descriptors match the spec. Remaining built-ins/BigInt failure
(Symbol.toStringTag.js verifyProperty) is blocked on String(Symbol)
support in the Symbol track.
2026-08-12 03:41:22 +08:00