mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-25 03:01:12 +08:00
fix: for-in/for-of 左侧未声明写改读写登记集并集判定——读侧登记的全局槽漏全局对象属性写与 strict 漏抛
左侧标识符先读后写时全局槽由读侧登记,写侧单集判定不命中:sloppy 写穿透漏发(循环后读陈旧值)、strict 漏抛 ReferenceError。与其余 8 写点统一为 is_implicit_global_reg;补 3 枚判别性钉(sloppy for-in / for-of 穿透 + strict for-in 漏抛,回退单集判定必红)。
This commit is contained in:
@@ -89,7 +89,7 @@ impl Emitter {
|
||||
self.emit_throw_error("TypeError", "cannot assign to read-only property", ctx)?;
|
||||
}
|
||||
} else {
|
||||
let is_implicit = ctx.implicit_global_writes.contains(&var_reg);
|
||||
let is_implicit = ctx.is_implicit_global_reg(var_reg);
|
||||
if is_implicit && ctx.is_strict {
|
||||
// 严格模式未声明写:抛 ReferenceError,跳过寄存器写(值无关)。
|
||||
self.emit_strict_undeclared_write(name, ctx)?;
|
||||
|
||||
@@ -116,7 +116,7 @@ impl Emitter {
|
||||
self.emit_throw_error("TypeError", "cannot assign to read-only property", ctx)?;
|
||||
}
|
||||
} else {
|
||||
let is_implicit = ctx.implicit_global_writes.contains(&var_reg);
|
||||
let is_implicit = ctx.is_implicit_global_reg(var_reg);
|
||||
if is_implicit && ctx.is_strict {
|
||||
// 严格模式未声明写:抛 ReferenceError,跳过寄存器写(值无关)。
|
||||
self.emit_strict_undeclared_write(name, ctx)?;
|
||||
|
||||
Reference in New Issue
Block a user