diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index be7df5b9a9..c8967a7f5f 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -1152,6 +1152,8 @@ static Bytecode::CodeGenerationErrorOr generate_array_binding_pattern_byte */ auto is_iterator_exhausted_register = generator.allocate_register(); + generator.emit(Value(false)); + generator.emit(is_iterator_exhausted_register); auto iterator_reg = generator.allocate_register(); generator.emit(value_reg); @@ -1306,6 +1308,20 @@ static Bytecode::CodeGenerationErrorOr generate_array_binding_pattern_byte first = false; } + auto& done_block = generator.make_block(); + auto& not_done_block = generator.make_block(); + + generator.emit(is_iterator_exhausted_register); + generator.emit().set_targets( + Bytecode::Label { done_block }, + Bytecode::Label { not_done_block }); + + generator.switch_to_basic_block(not_done_block); + generator.emit(iterator_reg); + generator.emit(Completion::Type::Normal, Optional {}); + generator.emit(Bytecode::Label { done_block }); + + generator.switch_to_basic_block(done_block); return {}; }