fix: 块级 let/const/class 预声明 + TDZ 读取运行时抛 ReferenceError

This commit is contained in:
爱特每羊队
2026-08-10 21:07:39 +08:00
parent 717e927057
commit 7055ef1fbb
9 changed files with 237 additions and 8 deletions
+8 -1
View File
@@ -36,7 +36,14 @@ impl Emitter {
return Ok(r);
}
let var_reg = ctx.lookup_or_builtin(name)?;
let var_reg = match ctx.lookup_or_builtin(name) {
Ok(reg) => reg,
Err(err) if err.contains("before initialization") => {
// TDZ:块级预声明占位后,声明点前读取编译为运行时抛 ReferenceError。
return self.emit_tdz_throw(&err, ctx);
}
Err(err) => return Err(err),
};
let r = ctx.alloc_reg();
ctx.inst(Inst::new(OpCode::LOAD_VAR, Operand::Reg(r), Operand::Reg(var_reg), Operand::None));
Ok(r)