From bc08d39754e82d9a2139cf93509eecc5afc832c7 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Thu, 30 Jun 2022 14:29:43 +0100 Subject: [PATCH] LibJS/Bytecode: Make for, do/while and while always switch to end block Previously we only did this if the body block was not terminated. If it was, all future codegen would happen in this block terminated body block until another switch occurred, dropping all generated instructions in this time on the floor. --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 27184a4106..cf243901f7 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -738,10 +738,10 @@ Bytecode::CodeGenerationErrorOr WhileStatement::generate_labelled_evaluati generator.emit().set_targets( Bytecode::Label { test_block }, {}); - generator.switch_to_basic_block(end_block); - generator.emit(result_reg); } + generator.switch_to_basic_block(end_block); + generator.emit(result_reg); return {}; } @@ -789,10 +789,10 @@ Bytecode::CodeGenerationErrorOr DoWhileStatement::generate_labelled_evalua generator.emit().set_targets( Bytecode::Label { test_block }, {}); - generator.switch_to_basic_block(end_block); - generator.emit(result_reg); } + generator.switch_to_basic_block(end_block); + generator.emit(result_reg); return {}; } @@ -895,15 +895,15 @@ Bytecode::CodeGenerationErrorOr ForStatement::generate_labelled_evaluation generator.emit().set_targets( Bytecode::Label { *test_block_ptr }, {}); - - generator.switch_to_basic_block(end_block); - generator.emit(result_reg); } if (has_lexical_environment) generator.end_variable_scope(); generator.end_breakable_scope(); + + generator.switch_to_basic_block(end_block); + generator.emit(result_reg); return {}; }