LibJS: Generate bytecode for UpdateExpression with MemberExpression arg

This commit is contained in:
Andreas Kling 2021-10-25 15:17:41 +02:00
parent 1dc60b028f
commit 72736f9e93
Notes: sideshowbarker 2024-07-18 01:53:21 +09:00

View File

@ -1134,29 +1134,23 @@ void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) co
void UpdateExpression::generate_bytecode(Bytecode::Generator& generator) const
{
if (is<Identifier>(*m_argument)) {
auto& identifier = static_cast<Identifier const&>(*m_argument);
generator.emit<Bytecode::Op::GetVariable>(generator.intern_identifier(identifier.string()));
generator.emit_load_from_reference(*m_argument);
Optional<Bytecode::Register> previous_value_for_postfix_reg;
if (!m_prefixed) {
previous_value_for_postfix_reg = generator.allocate_register();
generator.emit<Bytecode::Op::Store>(*previous_value_for_postfix_reg);
}
if (m_op == UpdateOp::Increment)
generator.emit<Bytecode::Op::Increment>();
else
generator.emit<Bytecode::Op::Decrement>();
generator.emit<Bytecode::Op::SetVariable>(generator.intern_identifier(identifier.string()));
if (!m_prefixed)
generator.emit<Bytecode::Op::Load>(*previous_value_for_postfix_reg);
return;
Optional<Bytecode::Register> previous_value_for_postfix_reg;
if (!m_prefixed) {
previous_value_for_postfix_reg = generator.allocate_register();
generator.emit<Bytecode::Op::Store>(*previous_value_for_postfix_reg);
}
TODO();
if (m_op == UpdateOp::Increment)
generator.emit<Bytecode::Op::Increment>();
else
generator.emit<Bytecode::Op::Decrement>();
generator.emit_store_to_reference(*m_argument);
if (!m_prefixed)
generator.emit<Bytecode::Op::Load>(*previous_value_for_postfix_reg);
}
void ThrowStatement::generate_bytecode(Bytecode::Generator& generator) const