mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-25 03:01:12 +08:00
feat: 异常与 return 穿越释放资源,dispose_count 门控
This commit is contained in:
@@ -723,15 +723,17 @@ impl Vm {
|
||||
.iter()
|
||||
.filter(|h| h.frame_depth == self.frames.len() && h.finally_pc.is_some())
|
||||
.count();
|
||||
// .return()/.throw() 注入时生成器挂起快照中打开的全部迭代器一并逃出
|
||||
// (栈上迭代器属于本生成器),完成恢复处统一关闭。
|
||||
// .return()/.throw() 注入时生成器挂起快照中打开的全部迭代器与资源一并逃出
|
||||
// (栈上迭代器/资源属于本生成器),完成恢复处统一关闭/释放。
|
||||
let for_of_count = self.iters.for_of_iters.len();
|
||||
let for_in_count = self.iters.for_in_iters.len();
|
||||
let dispose_count = self.dispose_stack.len();
|
||||
let completion = crate::vm::Completion::Return {
|
||||
value,
|
||||
remaining_finally: crossed,
|
||||
for_of_count,
|
||||
for_in_count,
|
||||
dispose_count,
|
||||
};
|
||||
if let Some(finally_pc) = self.record_completion(completion) {
|
||||
self.pc = finally_pc;
|
||||
|
||||
Reference in New Issue
Block a user