Commit Graph

145 Commits

Author SHA1 Message Date
pjh123 2669967967 fix: parseInt/parseFloat 前缀解析与 radix 语义符合规范 2026-08-15 21:40:27 +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 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 1b9974fe7f fix: BigInt64Array/BigUint64Array 与 DataView BigInt 存取走真 BigInt 语义
TA 元素读写按 kind 分流:BigInt 类型走 ToBigInt(Number 入参抛 TypeError、
写入 mod 2^64 截断、读出为真 BigInt 值),数值类型走 ToNumber 且显式拒绝
BigInt 值;消除 64 位整数经 f64 中转的静默精度丢失。

- runtime_api 新增公共 to_bigint_full / string_to_bigint_full,bigint 构造器
  与 asIntN/asUintN 改调公共版消除双实现
- sort/toSorted 默认序对 BigInt 类型按 i64/u64 值比较;reverse/copyWithin/
  filter/toReversed/with 消除无谓数值中转
- 构造器第一参数非对象统一走 ToIndex(bool/null/BigInt/字符串),Symbol 抛
  TypeError
- DataView get/setBigInt64/getBigUint64 返回 BigInt 值、入参按 ToBigInt 校验
- 测试:精度往返 / TypeError / mod 2^64 / 字节序 / 排序 / 回调值类型断言
2026-08-15 20:04:48 +08:00
pjh123 f63b41454f fix: 字符串索引体系改 UTF-16 code unit 语义(astral 字符正确) 2026-08-15 19:34:55 +08:00
pjh123 ffe1d6fc02 fix: json 测试保留 Vm 生命周期再读字符串结果
eval 返回 (Vm, JsValue) 但绑定符丢弃 Vm 使字符串随 Vm drop 释放,
stringify_val 随后读已释放内存。命名绑定保留 Vm 到断言结束。
2026-08-15 19:18:19 +08:00
pjh123 31296ed16d perf: 相等/严格相等/ToNumber 改 js_type 单次提取收敛并修复混合 tag 严格相等 ±0 语义 2026-08-15 15:50:35 +08:00
pjh123 f9c639426d perf: f64 转字符串去中间分配并加整数 double 快路径 2026-08-15 15:06:43 +08:00
pjh123 f2535ffc77 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 b860fdf5ee fix: string.search 无参调用越界 panic,参数读取守卫前置返回 -1 2026-08-15 04:28:01 +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 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 c2aea3f8e9 fix: split 分隔符为 RegExp 子类对象时按字符串语义切分 2026-08-14 10:44:23 +08:00
pjh123 ae58508760 chore: 清理 oxide_builtins clippy 告警 2026-08-14 05:26:35 +08:00
pjh123 84984f864d perf: 字符串构造类方法改借用免整串拷贝 2026-08-13 23:13:34 +08:00
pjh123 1b6b4e335b perf: 字符串只读扫描方法改借用免整串拷贝 2026-08-13 22:32:38 +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 e826a65f3c perf: 字符串 for-of 迭代改字节游标增量推进(B4 初步) 2026-08-13 15:03:48 +08:00
pjh123 3ae2f2d9b7 perf: new_string_owned 零拷贝路径替代 new_string 二次克隆(B2) 2026-08-13 14:55:08 +08:00
爱特每羊队 3f45f38f51 feat: module natives(命名空间对象/导出读写/star 合并/seal/eval/data + 链接检查)
- __moduleObject:null 原型命名空间,带 @@toStringTag=Module(w/e/c=false)
- __moduleSet:定义不可写/可枚举/不可配置导出属性
- __moduleGet:模块命名空间 exotic Get(缺失导出抛 TypeError)
- __moduleLinkGet:import 绑定链接期检查(缺失导出抛 SyntaxError)
- __moduleStar:export * 合并,冲突名跳过(dst 已有属性省略)
- __moduleSeal:封冻命名空间
- __moduleEval:同步执行依赖模块并返回命名空间
- __moduleData:json/text 数据模块命名空间
2026-08-12 17:37:33 +08:00
爱特每羊队 1323a0564b feat: Duration.total 支持字符串/原始值 relativeTo 语义(无效与越界字符串 RangeError、数字/null 等 TypeError、days 日历路径),total 子集 41/29 2026-08-12 16:58:57 +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
爱特每羊队 f16e39dd98 fix: Instant 参数转换按规范——非字符串原始值直接抛 TypeError(from/compare/equals/since/until) 2026-08-12 14:33:16 +08:00
爱特每羊队 0cd98084da feat: Temporal.PlainDateTime.prototype.equals(实例/字符串/对象/ZDT 统一比较,绑定注册) 2026-08-12 14:27:25 +08:00
爱特每羊队 d5b45d5b24 fix: Temporal PlainDate/PlainDateTime.from 表示范围边界、leap second、constrain 下限与实例转换 2026-08-12 14:17:28 +08:00
爱特每羊队 5726d4126b feat: Temporal PlainDate 字符串走 ParseTemporalDateString(注解/UTC/小数位/分数分钟校验),property bag 支持 monthCode 与日历标识符解析 2026-08-12 13:49:58 +08:00
爱特每羊队 20486cd615 fix: PlainDate/PlainDateTime until/since 月分解 days 计算(current 保持真实钳制日期,锚定日只用于越界比较) 2026-08-12 13:31:15 +08:00
爱特每羊队 9a0ab79711 feat: PlainDate/PlainDateTime until/since 舍入选项(roundingMode/roundingIncrement/smallestUnit,GetDifferenceSettings 对齐) 2026-08-12 13:26:10 +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
爱特每羊队 3e8cf3eb23 fix: Array 方法 array-like receiver/Get 异常传播、species 构造、slice/toSpliced/toSorted 规范化,数组字面量空洞语义 2026-08-12 12:51:28 +08:00
爱特每羊队 3e61b573db feat: 新增 Symbol.species well-known symbol 绑定(Symbol.species 解析/键槽/内建对象) 2026-08-12 12:50:53 +08:00
爱特每羊队 c9b05ecc45 feat: PlainDate equals/compare 字符串参数经 date_like_ymd 转换并做 ISO 范围校验 2026-08-12 10:47:43 +08:00
爱特每羊队 bf3a0ff0da fix: PlainDate until/since 全范围 ISO 日期,civil 日计数 + 范围校验,修复全量运行崩溃 2026-08-12 10:47:32 +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
爱特每羊队 f3c37911f7 feat: arbitrary-precision BigInt via num-bigint (literals, arithmetic, toString, asIntN/asUintN) 2026-08-12 03:15:18 +08:00
爱特每羊队 ca293a57e9 fix: Object.prototype.toString tags for Math/JSON/Arguments 2026-08-12 02:29:40 +08:00
爱特每羊队 28477a3e47 feat: BigInt constructor ToPrimitive semantics, toString(radix), asIntN/asUintN; ctor [[Prototype]]=Function.prototype 2026-08-12 02:23:27 +08:00
爱特每羊队 6afeaafb54 feat: implement PlainDateTime until/since with spec rounding semantics 2026-08-12 01:18:34 +08:00
爱特每羊队 ed8c76c60f feat: implement PlainDateTime add/subtract arithmetic 2026-08-11 23:14:42 +08:00
爱特每羊队 d1d85ffe4f feat: implement PlainDateTime toString options and ISO range parsing 2026-08-11 23:07:41 +08:00