1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 04:48:14 +00:00

LibJS/Bytecode: Don't begin breakable scope before variable scope in for

This is no longer required, since the variable scope is ended after
switching to the end block, which means that LeaveLexicalEnvironment
will always be generated instead of depending on the unwind mechanism
to handle it for us.
This commit is contained in:
Luke Wilde 2022-07-17 19:22:18 +01:00 committed by Linus Groh
parent 3a48c7fdaf
commit 896c477107

View file

@ -827,9 +827,6 @@ Bytecode::CodeGenerationErrorOr<void> ForStatement::generate_labelled_evaluation
bool has_lexical_environment = false;
// The breakable scope needs to start here to unwind the potentially created lexical environment for the init bytecode.
generator.begin_breakable_scope(Bytecode::Label { end_block }, label_set);
if (m_init) {
if (m_init->is_variable_declaration()) {
auto& variable_declaration = verify_cast<VariableDeclaration>(*m_init);
@ -882,7 +879,9 @@ Bytecode::CodeGenerationErrorOr<void> ForStatement::generate_labelled_evaluation
generator.switch_to_basic_block(*body_block_ptr);
generator.begin_continuable_scope(Bytecode::Label { *update_block_ptr }, label_set);
generator.begin_breakable_scope(Bytecode::Label { end_block }, label_set);
TRY(m_body->generate_bytecode(generator));
generator.end_breakable_scope();
generator.end_continuable_scope();
if (!generator.is_current_block_terminated()) {
@ -906,7 +905,6 @@ Bytecode::CodeGenerationErrorOr<void> ForStatement::generate_labelled_evaluation
if (has_lexical_environment)
generator.end_variable_scope();
generator.end_breakable_scope();
return {};
}