mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
fix: REST_OBJECT 提前消费 ext 字防 ToObject 早返回后 pc 错位
This commit is contained in:
@@ -561,6 +561,10 @@ impl Vm {
|
||||
|
||||
pub(crate) fn dispatch_rest_object(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("REST_OBJECT rd={}", rd);
|
||||
// ext 字(excluded 常量下标)在任何路径都先消费,防止 ToObject 早返回后
|
||||
// pc 错位把 ext 字当下一条指令解码(曾误读成 UNSPILL slot)。
|
||||
let excluded_idx = self.bytecode[self.pc] as usize;
|
||||
self.pc += 1;
|
||||
let src = self.regs[a];
|
||||
if !src.is_object() {
|
||||
// ToObject:null/undefined 抛;number/boolean/symbol 无自有属性 → 空对象;
|
||||
@@ -586,8 +590,6 @@ impl Vm {
|
||||
self.regs[rd] = JsValue::from_js_object(rest_ptr);
|
||||
return Ok(());
|
||||
}
|
||||
let excluded_idx = self.bytecode[self.pc] as usize;
|
||||
self.pc += 1;
|
||||
let excluded = self
|
||||
.immutables()
|
||||
.get(excluded_idx)
|
||||
|
||||
Reference in New Issue
Block a user