Commit Graph

47 Commits

Author SHA1 Message Date
pjh123 376a2a1e9e refactor: 内置八文件内核访问器调用改经 VmHost 能力方法 2026-10-08 07:23:24 +00:00
pjh123 641e4f6065 refactor: 正则与缓冲区族符号键改经 realm 维度编码并推进版本 2026-10-07 04:13:18 +00:00
pjh123 214494d3d5 refactor: 退役 new_array 死参数与三十四处调用点 2026-10-03 04:32:20 +00:00
pjh123 ccd6b06b6e refactor: 退役数组缓冲与正则与 promise 盒克隆重写族死函数 2026-10-02 21:46:41 +00:00
pjh123 79dcc1d553 fix: RegExp flags getter 对无槽对象按规范读旗访问器组串 2026-09-26 23:17:53 +00:00
pjh123 a7484480f6 fix: RegExp 构造器对未知旗与重旗抛 SyntaxError 2026-09-26 22:46:37 +00:00
pjh123 d773cc7282 fix: matchAll 迭代器 next 按规范重写为 RegExpExec 协议与内部槽语义 2026-09-26 14:35:21 +00:00
pjh123 fdd4783701 fix: 正则 v 标志零宽推进按码点口径 2026-09-25 14:17:21 +00:00
pjh123 81130ce9c7 fix: 正则非 u 标志按码元匹配,u/v 标志按码点 2026-09-25 09:22:33 +00:00
pjh123 01195ffb32 fix: match/search 走 GetMethod 派发,flags 归序与 normalize 校验 2026-09-25 06:23:11 +00:00
pjh123 72f9a063a4 feat: 七构造器绑定 Symbol.species 静态访问器 2026-09-22 17:23:15 +00:00
pjh123 fb9365bde2 fix: split 委托 Symbol.split 并补零宽与 limit 口径 2026-09-22 07:45:34 +00:00
pjh123 169f4b2984 fix: RegExp 构造器对象模式取原始模式文本 2026-09-22 07:45:28 +00:00
pjh123 29bad1e582 fix: 删 exec 尾部 lastIndex 重复写回并修正 flags 注释 2026-09-22 02:20:42 +00:00
pjh123 49c10ba20a fix: String 替换臂收口 GetSubstitution 并补齐 $ 展开 2026-09-22 02:04:11 +00:00
pjh123 fb4a98b7c0 fix: exec/match 族补 indices 与 groups null 原型并收口空模式委托 2026-09-22 01:09:52 +00:00
pjh123 8d8c0607c6 fix: test y 标志按 lastIndex 锚定与失败置 0 语义 2026-09-22 00:35:58 +00:00
pjh123 0eb44413b1 style: 格式化 oxide_builtins 六文件消除 fmt 漂移 2026-09-22 00:16:03 +00:00
pjh123 66387b5638 fix: Symbol.replace $<name> 命名组替换 + groups 空对象不创建 2026-09-21 18:04:11 +00:00
pjh123 58a97f838c fix: RegExp source getter EscapeRegExpPattern + groups 对象构建 2026-09-21 17:58:01 +00:00
pjh123 6ffb4d4653 fix: matchAll flags 读走 Get 语义传播 getter 抛错 2026-09-21 16:35:17 +00:00
pjh123 8e22c48b70 fix: RegExp source/flags 原型访问器与 GC 根追踪 2026-09-21 14:56:19 +00:00
pjh123 b4d281d109 feat: RegExp 五 Symbol 入口 live flag 直读与 lastIndex 替换收尾 2026-09-21 07:02:56 +00:00
pjh123 b1fade6afc fix: RegExp exec 重写 sticky 锚定与 lastIndex 规范读写 2026-09-21 04:37:12 +00:00
pjh123 a25bc53377 feat: RegExp 八个 flag 只读访问器与 u/v 互斥校验 2026-09-21 04:09:52 +00:00
pjh123 46211a66a5 feat: 实现 RegExp.escape 静态方法 2026-09-21 01:27:41 +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 50674ee4f5 builtins/vm: matchAll 编译正则载体专型标签,释放/深拷贝经 RegExp 同一守卫,止逐调用 Box 泄漏 2026-09-13 11:05:52 +00:00
pjh123 c49cdbf9c5 fix: 迭代器包装对象分配走统一入口登记 epoch 对象表——执行期 epoch 换新只晋升表内对象,绕过登记的包装器/结果对象在换新后悬垂,闭合 2026-09-13 00:41:48 +00:00
pjh123 469ef7543b perf: GC 字节账目补齐 + is_epoch_ptr O(1) + 分配热路径触发 2026-08-22 08:10:32 +08:00
pjh123 4029259255 fix: builtins 对象分配统一走 alloc_object 登记消除高频路径泄漏 2026-08-16 03:36:02 +08:00
pjh123 69152ad608 fix: 迭代器原型形状补全(Iterator.prototype/string 中继层/next 原型化) 2026-08-15 23:36:01 +08:00
pjh123 2359c4e0a4 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 0e32d663ce 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 6c6d4320a6 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 781d0c832f perf: 字符串构造类方法改借用免整串拷贝 2026-08-13 23:13:34 +08:00
pjh123 3ad80d6ed4 perf: new_string_owned 零拷贝路径替代 new_string 二次克隆 2026-08-13 14:55:08 +08:00
pjh123 6c79dbb21c feat: class 私有成员语义(字段/方法/访问器 + brand 检查 + 契约修复) 2026-08-09 11:08:36 +08:00
pjh123 826d9fd0a2 feat: RegExp.prototype 实现 Symbol.match/replace/search/split/matchAll 2026-08-08 22:33:32 +08:00
pjh123 dc6eed44f8 fix: RegExp flag 全量透传(u/s/y/d 生效,\p{...} unicode 属性可用) 2026-08-08 18:05:59 +08:00
pjh123 31542a2576 fix: 数组属性存储机制(array_prop_count 显式元素数 + shape 属性偏移 + IC/prop_forge 对齐) 2026-08-07 21:53:45 +08:00
pjh123 db04bc25c9 feat: 迁移到 regress 引擎(backref/lookaround/命名组/v-flag)+ 手动 \$ 展开 replace + exec 捕获组数组 2026-08-07 21:29:22 +08:00
pjh123 31e28a03a6 docs: 补充注释与格式化 2026-08-06 23:10:27 +08:00
pjh123 263fd255b6 docs: 添加 Rustdoc 注释 2026-08-05 21:46:47 +08:00
pjh123 7ba5da9513 refactor: 用户数字参数改走 coerce_number_bounded,对象参数支持 ToPrimitive 2026-06-27 13:49:37 +08:00
pjh123 f23d4e61b2 feat: 提取 oxide_builtins 独立 crate,泛型化 <H: VmHost> 2026-06-25 22:38:23 +08:00