diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 68d6d7d4d5..dd92c4a196 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -279,24 +279,32 @@ void AssignmentExpression::generate_bytecode(Bytecode::Generator& generator) con void WhileStatement::generate_bytecode(Bytecode::Generator& generator) const { + generator.emit(js_undefined()); generator.begin_continuable_scope(); auto test_label = generator.make_label(); + auto result_reg = generator.allocate_register(); + generator.emit(result_reg); m_test->generate_bytecode(generator); auto& test_jump = generator.emit(); m_body->generate_bytecode(generator); generator.emit(test_label); test_jump.set_target(generator.make_label()); generator.end_continuable_scope(); + generator.emit(result_reg); } void DoWhileStatement::generate_bytecode(Bytecode::Generator& generator) const { + generator.emit(js_undefined()); generator.begin_continuable_scope(); auto head_label = generator.make_label(); m_body->generate_bytecode(generator); generator.end_continuable_scope(); + auto result_reg = generator.allocate_register(); + generator.emit(result_reg); m_test->generate_bytecode(generator); generator.emit(head_label); + generator.emit(result_reg); } void ForStatement::generate_bytecode(Bytecode::Generator& generator) const @@ -306,8 +314,11 @@ void ForStatement::generate_bytecode(Bytecode::Generator& generator) const if (m_init) m_init->generate_bytecode(generator); + generator.emit(js_undefined()); generator.begin_continuable_scope(); auto jump_label = generator.make_label(); + auto result_reg = generator.allocate_register(); + generator.emit(result_reg); if (m_test) { m_test->generate_bytecode(generator); test_jump = &generator.emit(); @@ -320,6 +331,7 @@ void ForStatement::generate_bytecode(Bytecode::Generator& generator) const if (m_test) test_jump->set_target(generator.make_label()); generator.end_continuable_scope(); + generator.emit(result_reg); } void ObjectExpression::generate_bytecode(Bytecode::Generator& generator) const