pjh123
f088858cf4
emit/vm: 可删全局内置集撤 globalThis 与 TypedArray 两名——现行规范 globalThis 为 c:true 可删(真删清槽)、%TypedArray% 无全局名(删不存在属性返 true),宿主名排除面收窄至 $262,delete 子集 A/B 逐文件零翻转
2026-09-13 17:07:51 +00:00
pjh123
c80944d375
emit/vm: 受限词法名集回滚三常量——eval 为可配置全局属性属合法遮蔽(规范自有属性臂无静态受限臂),class eval 维持解析期拒绝独立钉住(类体恒严格,与受限集无关)
2026-09-13 12:26:12 +00:00
pjh123
699059aee5
emit/vm: delete 全局可写内置标识符真删属性并清镜像槽——新增 DELETE_GLOBAL_PROP_C,可删名集自可写划分单源派生(除 globalThis 与宿主名),test262 delete JSON 用例由红转绿
2026-09-13 12:26:01 +00:00
pjh123
c564ec539b
emit/kernel: 可写 builtin 全局标识符写双写全局属性,三常量描述符对齐规范 c:false,受限词法名集补 eval
...
- 谓词注册表化:targets_readonly_builtin 解析条件抽公共助手,新增
targets_writable_builtin / is_writable_builtin_global(BUILTIN_GLOBALS
减只读三常量派生,不复制名单)+ 只读/可写划分漂移守卫单测
- 12 个赋值族写点(简单/复合/更新/逻辑赋值、解构两臂、for-in/for-of
标识符目标)补双写臂:STORE_VAR 后 0x98 同步全局对象属性(既有可写
属性原地更值、保 e/c 位),裸读镜像与 globalThis 反射不失步
- for-in 头 tier 写点移除 builtin 名例外:可写 builtin 名迭代键照规范
覆写全局属性(三常量仍由拦截臂跳过)
- 三常量(undefined/NaN/Infinity)全局描述符 configurable 翻正为
false:delete 拒绝、属性保留,描述符读同步
- 脚本顶层受限词法名集 3→4(补 eval,静态受限臂):let/const/class
eval 顶层声明编译期 SyntaxError
- 配套钉:7 处既有钉随 c 位翻正 + 2 枚 for-in/eval 形态钉反转,新增
global_builtin_writable_tests(16 钉:双写六形态 + 遮蔽/strict/eval/
宿主名面)
test262 子集:built-ins/global 29/29、三常量族 20/20、11.13.1-4 7/7、
assignmenttargettype plain 8/8 全绿;language/global-code 17 失败文件
双树单跑一致(pre-existing);annexB assignmenttargettype 7 个 parse
error 为既有解析器缺口
2026-09-13 10:46:10 +00:00
pjh123
1fdb7aca2d
fix: eval 代码顶层函数声明撞不可写全局内置——sloppy 编译期首指令 TypeError、strict 函数声明不落全局
2026-09-13 09:05:54 +00:00
pjh123
675b6c10e9
fix: 顶层函数声明名并入 A 侧 tier 路由——再赋值/裸读与全局属性收敛单一真值
2026-09-13 02:05:31 +00:00
pjh123
6aff1101f3
fix: 顶层受限全局名 lexical 声明编译期拒绝——let/const undefined|NaN|Infinity 撞 GDI 三常量 SyntaxError
2026-09-12 22:45:24 +00:00
pjh123
bf08803071
fix: 顶层 var 声明带初始化撞不可写全局用户属性 strict 抛 TypeError——用户名声明处写点改 session 解析 PutValue 语义,builtin 名保 GDI 写点;序言缺失分支全局不可扩展两模式对齐抛 TypeError
2026-09-12 21:36:10 +00:00
pjh123
44c16cab8a
fix: 顶层 var 读写直连全局对象属性单一真值——GDI 序言 + 声明处同步删除,类原型 session 直分防晋升克隆 identity 分裂,自增减 int 保持
2026-09-12 15:48:32 +00:00
pjh123
3c277b6a73
docs: 隐式全局写边界注对齐读写登记集并集判定
...
调用点现传并集命中寄存器(含读侧登记的全局槽),旧注「仅 implicit_global_writes 命中」失实。
2026-09-11 12:44:48 +00:00
pjh123
ef3b95f6d3
fix: for-in/for-of 左侧未声明写改读写登记集并集判定——读侧登记的全局槽漏全局对象属性写与 strict 漏抛
...
左侧标识符先读后写时全局槽由读侧登记,写侧单集判定不命中:sloppy 写穿透漏发(循环后读陈旧值)、strict 漏抛 ReferenceError。与其余 8 写点统一为 is_implicit_global_reg;补 3 枚判别性钉(sloppy for-in / for-of 穿透 + strict for-in 漏抛,回退单集判定必红)。
2026-09-11 12:44:24 +00:00
pjh123
430231236d
fix: 未声明标识符读写混合解析——读侧登记的全局槽写不穿透全局对象
...
未声明名由首次引用侧登记全局槽:读侧(LOAD_GLOBAL 槽)登记后,
后的写点只查写侧集合,补全局对象属性写被跳过——条件读走全局
属性、写落脚本内寄存器,脱节成死循环;更新式/复合式/逻辑赋值的
旧值又取自入口快照槽(读从不刷新槽),先读后写算出陈旧值。
写点隐式全局判定改读写登记集合取并(7 处),RMW 旧值读前经
LOAD_GLOBAL_TYPEOF 从全局对象取当前值(缺失按 undefined,sloppy
未解析引用 GetBaseValue 语义),读侧登记集合随继承绑定传入子
函数 ctx。
2026-09-11 10:14:56 +00:00
pjh123
c0451a484a
fix: do-while 的 continue 目标错指体首——改指条件位置使条件可被求值
2026-09-11 09:46:29 +00:00
pjh123
a5aab0077f
fix: for-in var 头撞既有绑定复用槽位消除顶层编译报错,迭代键写不可写全局内置接只读拦截
2026-09-10 05:56:10 +08: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
eabd0b3608
fix: 逻辑赋值标识符目标接入不可写全局内置拦截,目标位置内置预登记稳定槽解析
2026-09-10 02:30:09 +08:00
pjh123
b77a9322e5
fix: 不可写全局内置(undefined/NaN/Infinity)寄存器镜像写编译期拦截——sloppy 静默 no-op、strict 抛 TypeError
2026-09-09 23:17:01 +08:00
pjh123
2457f283fe
fix: 顶层 var 全局属性求值前创建(声明定时语义)+ 无初始化 var 声明不再抹槽值
2026-09-09 22:00:29 +08:00
pjh123
bd1427b116
test: TDZ 单测补嵌套块/自引用/hoisted 读形状 + 固化单语句体 lexical 声明解析拒绝契约
2026-09-09 19:52:03 +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
64f582d34b
chore: rustfmt 全量格式化——CI fmt check 差异清零
2026-09-09 15:14:57 +08:00
pjh123
0ffb5d2cf3
fix: tagged template 语义修正——cooked undefined/this绑定/site缓存/冻结 + groupBy getter 异常传播 + defineGetter setter 保留
2026-08-22 11:15:55 +08:00
pjh123
c7b54cb181
feat: String.raw/groupBy/withResolvers/f16round/__defineGetter__ 低垂果实批量实现
2026-08-22 10:26:00 +08:00
pjh123
355230b745
fix: REPL 变量跨轮次丢失 —— let/const 脚本顶层写全局对象
2026-08-21 22:44:48 +08:00
pjh123
c7b238e518
feat: eval 全局注册与最小执行(间接 eval)
2026-08-16 22:25:33 +08:00
pjh123
e100bfb8b4
feat: SuppressedError 内置错误实现(三字段属性序 + 构造器接线)
2026-08-16 19:04:09 +08:00
pjh123
089179daab
refactor: 函数 strict 标志入 IR/编译/缓存链(零行为地基)
2026-08-16 16:46:33 +08:00
pjh123
277429e3ea
fix: 绑定模式内嵌默认值表达式补捕获扫描,嵌套函数引用外层绑定防 LOAD_GLOBAL 回归
2026-08-16 14:53:57 +08:00
pjh123
c5c4916a8f
fix: 绑定侧解构计算键参与闭包捕获遍历防静默错值
2026-08-16 14:30:20 +08:00
pjh123
ef3882ac55
feat: 解构计算键通用 fallback 支持任意键表达式
2026-08-16 13:49:17 +08:00
pjh123
ce0f865004
fix: for-in/for-of 头名仅 var 提升入入口初始化名单,排除 let/const
2026-08-16 13:32:25 +08:00
pjh123
9002a1aa77
fix: 类表达式真实名 cell 按声明路径门控,不再覆盖外层同名绑定
2026-08-16 13:32:25 +08:00
pjh123
fe8892079e
chore: 全仓 rustfmt 格式化归拢
2026-08-16 12:50:36 +08:00
pjh123
648842fd82
feat: new.target MetaProperty emit 支持(LOAD_VAR NewTarget)
2026-08-16 12:43:50 +08:00
pjh123
1229924af6
fix: var 捕获绑定函数与程序入口统一初始化为 undefined 消除 TDZ 误报
2026-08-16 12:34:10 +08:00
pjh123
5086e15b66
fix: class 声明名纳入闭包捕获,嵌套函数经 cell 读取类绑定
2026-08-16 12:34:03 +08:00
pjh123
bbc09a8208
feat: 私有字段复合赋值 emit 支持(GET_PRIVATE→op→SET_PRIVATE 序列)
2026-08-16 12:12:26 +08:00
pjh123
00b2f4d8b1
fix: class 生成器方法补 is_generator 标志,修正方法形态生成器语义
2026-08-16 11:44:20 +08:00
pjh123
744899aae9
fix: for-of/for-in 提前退出时按规范顺序完成 IteratorClose
...
return/break/continue 逃出 for-of 时此前完全不执行 IteratorClose:
BREAK/CONTINUE/RETURN 指令现在经 ext 字携带词法逃出的迭代器层数
(for-of + for-in 各 16 位),运行时在全部 finally 穿越之后、真正
跳转/返回之前按 LIFO 关闭——与规范 §13.7.5.4(循环体完成值已含
内部 try-finally 处理,IteratorClose 在后)顺序一致。
- emit 词法:LabelCtx 增加 for-of/for-in 深度计数,loop/switch/label
打开时快照,break/continue/return 按当前深度减目标深度计算逃出层数
(switch 内 break 以 switch 打开点为基准,目标循环自身不计入)
- 指令编码:brk/cont/ret 三参构造,lower 跳转路径补发 ext 字
- 运行时:dispatch_break/continue/return 读取逃出计数,无 finally 时
直接关闭后跳转/返回,有 finally 时随 Completion 悬挂由 TRY_FINALLY_END
在穿越完成后消费;生成器 .return()/.throw() 注入经 complete_generator_return
全关快照栈迭代器;return() 抛错经 unwind 替代完成值并关闭剩余迭代器
- 顺带:for-in 逃出残留(无 return() 语义,仅弹栈);for-await-of 的
异步迭代器不做同步关闭(return() promise 须 await,走异步机制)
- 新增 15 项回归测试:return/labeled break/continue/switch/while/finally
顺序/抛错优先/生成器注入/for-in/for-await-of 嵌套
2026-08-16 09:31:39 +08:00
pjh123
4e2644016b
test: $262 宿主对象最小绑定 + is not defined 判定白名单化
...
引擎侧:绑定 $262 宿主对象(evalScript/global/gc 可用,detachArrayBuffer/
createRealm/agent 抛 not supported 而非 ReferenceError),并加入编译期
已知全局表;引用 $262.* 的测试从全量 skip 转为真实执行。
runner 侧:is not defined 不再一票吞 skip——解析错误消息中的标识符名,
仅在缺失全局白名单($262/structuredClone/queueMicrotask)内才按能力
缺失跳过;其余 is not defined 按真实失败计入,修复后应转 PASS 的
测试恢复可见。
2026-08-16 02:47:02 +08:00
pjh123
75153a909d
fix: 未声明标识符读取抛 ReferenceError(typeof 特判返回 undefined)
2026-08-16 00:10:08 +08:00
pjh123
7f1187feaf
fix: 非常量键成员 **= 复合赋值 rhs 生效
2026-08-15 23:20:36 +08:00
pjh123
391f613653
fix: 块内函数声明预声明支持(Annex B 块级绑定)
2026-08-15 23:13:26 +08:00
pjh123
bca463438d
fix: for-const 循环 update 段豁免 const 写检查(per-iteration 绑定合法)
2026-08-15 22:29:09 +08:00
pjh123
26db7ae07c
fix: TDZ 写与 const 赋值检查补全(含闭包捕获路径)
2026-08-15 21:55:43 +08:00
pjh123
78976cad0c
feat: 二元幂运算 opcode 支持 number 与 BigInt
...
- 新增 EXP opcode(0x94)与 emit 层 Exponential 分支,二元 a ** b 不再 compile error
- dispatch_exp 与 dispatch_compound_exp 共享 exp_result:IEEE-754 powf 快路径 +
BigInt 幂(负/超 u32 指数 RangeError)+ 混合 BigInt/Number TypeError
- 复合 **= 补 BigInt 语义(此前走 f64 近似),与二元 ** 行为一致
2026-08-15 21:17:49 +08:00
pjh123
38a4f20743
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
abeab6f216
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