feat: using 声明登记释放栈指令与 GC 根

This commit is contained in:
2026-10-09 17:55:08 +00:00
parent 0df3f9d5fd
commit b5ff2c132a
10 changed files with 88 additions and 23 deletions
+12
View File
@@ -649,6 +649,18 @@ impl Vm {
self.iters.pop_for_in();
}
/// using/await using 声明登记:把资源值(rd 槽)压入释放栈。
///
/// a 槽是释放提示(0 = 同步、1 = 异步),登记期原样保留供释放点分派;
/// 本指令只登记,释放时机由作用域出口点决定。
///
/// # 副作用
/// - 释放栈增长(栈内 JsValue 是 GC 根,run 边界清空)。
pub(crate) fn dispatch_dispose_register(&mut self, rd: usize, a: usize) {
vm_trace!("DISPOSE_REGISTER rd={} hint={}", rd, a);
self.dispose_stack.push(self.regs[rd]);
}
pub(crate) fn dispatch_for_of_init(&mut self, a: usize) -> Result<(), String> {
vm_trace!("FOR_OF_INIT r{}={:?}", a, self.regs[a]);
let iterable = self.regs[a];