From 72736f9e93963334a879c4fbc432677138e7d42f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 25 Oct 2021 15:17:41 +0200 Subject: [PATCH] LibJS: Generate bytecode for UpdateExpression with MemberExpression arg --- .../Libraries/LibJS/Bytecode/ASTCodegen.cpp | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index b55a79dddd1..c9c89557d11 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -1134,29 +1134,23 @@ void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) co void UpdateExpression::generate_bytecode(Bytecode::Generator& generator) const { - if (is(*m_argument)) { - auto& identifier = static_cast(*m_argument); - generator.emit(generator.intern_identifier(identifier.string())); + generator.emit_load_from_reference(*m_argument); - Optional previous_value_for_postfix_reg; - if (!m_prefixed) { - previous_value_for_postfix_reg = generator.allocate_register(); - generator.emit(*previous_value_for_postfix_reg); - } - - if (m_op == UpdateOp::Increment) - generator.emit(); - else - generator.emit(); - - generator.emit(generator.intern_identifier(identifier.string())); - - if (!m_prefixed) - generator.emit(*previous_value_for_postfix_reg); - return; + Optional previous_value_for_postfix_reg; + if (!m_prefixed) { + previous_value_for_postfix_reg = generator.allocate_register(); + generator.emit(*previous_value_for_postfix_reg); } - TODO(); + if (m_op == UpdateOp::Increment) + generator.emit(); + else + generator.emit(); + + generator.emit_store_to_reference(*m_argument); + + if (!m_prefixed) + generator.emit(*previous_value_for_postfix_reg); } void ThrowStatement::generate_bytecode(Bytecode::Generator& generator) const