mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:48:10 +00:00
LibJS: Add for loop bytecode generation
This commit is contained in:
parent
50ece3dd1b
commit
68ce69db88
2 changed files with 26 additions and 0 deletions
|
@ -333,6 +333,31 @@ Optional<Bytecode::Register> DoWhileStatement::generate_bytecode(Bytecode::Gener
|
|||
return body_result_reg;
|
||||
}
|
||||
|
||||
Optional<Bytecode::Register> ForStatement::generate_bytecode(Bytecode::Generator& generator) const
|
||||
{
|
||||
Bytecode::Op::Jump* test_jump { nullptr };
|
||||
|
||||
if (m_init) {
|
||||
[[maybe_unused]] auto init_result_reg = m_init->generate_bytecode(generator);
|
||||
}
|
||||
generator.begin_continuable_scope();
|
||||
auto jump_label = generator.make_label();
|
||||
if (m_test) {
|
||||
auto test_result_reg = m_test->generate_bytecode(generator);
|
||||
VERIFY(test_result_reg.has_value());
|
||||
test_jump = &generator.emit<Bytecode::Op::JumpIfFalse>(*test_result_reg);
|
||||
}
|
||||
auto body_result_reg = m_body->generate_bytecode(generator);
|
||||
if (m_update) {
|
||||
[[maybe_unused]] auto update_result_reg = m_update->generate_bytecode(generator);
|
||||
}
|
||||
generator.emit<Bytecode::Op::Jump>(jump_label);
|
||||
if (m_test)
|
||||
test_jump->set_target(generator.make_label());
|
||||
generator.end_continuable_scope();
|
||||
return body_result_reg;
|
||||
}
|
||||
|
||||
Optional<Bytecode::Register> ObjectExpression::generate_bytecode(Bytecode::Generator& generator) const
|
||||
{
|
||||
auto reg = generator.allocate_register();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue