From a590c8894d00a3b20f93a754b7fc89f4717274ec Mon Sep 17 00:00:00 2001 From: Haled Odat <8566042+HalidOdat@users.noreply.github.com> Date: Sat, 22 Jul 2023 03:03:47 +0200 Subject: [PATCH] Close iterator after generator return while array desctructoring --- .../src/bytecompiler/declaration/declaration_pattern.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/boa_engine/src/bytecompiler/declaration/declaration_pattern.rs b/boa_engine/src/bytecompiler/declaration/declaration_pattern.rs index ef227a34a69..da345e2bb42 100644 --- a/boa_engine/src/bytecompiler/declaration/declaration_pattern.rs +++ b/boa_engine/src/bytecompiler/declaration/declaration_pattern.rs @@ -190,8 +190,16 @@ impl ByteCompiler<'_, '_> { let exit = self.jump(); self.patch_handler(handler_index); + + let generator_return_handle = self.in_generator.then(|| self.push_handler()); self.emit_opcode(Opcode::Exception); self.emit_opcode(Opcode::PushTrue); + if let Some(generator_return_handle) = generator_return_handle { + let is_not_generator_exit = self.jump(); + self.patch_handler(generator_return_handle); + self.emit_opcode(Opcode::PushFalse); + self.patch_jump(is_not_generator_exit); + } self.patch_jump(exit); let iterator_close_handler = self.push_handler();