소스 검색

LibJS: Generate bytecode for UpdateExpression with MemberExpression arg

Andreas Kling 3 년 전
부모
커밋
72736f9e93
1개의 변경된 파일13개의 추가작업 그리고 19개의 파일을 삭제
  1. 13 19
      Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp

+ 13 - 19
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<Identifier>(*m_argument)) {
-        auto& identifier = static_cast<Identifier const&>(*m_argument);
-        generator.emit<Bytecode::Op::GetVariable>(generator.intern_identifier(identifier.string()));
-
-        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);
-        }
+    generator.emit_load_from_reference(*m_argument);
 
-        if (m_op == UpdateOp::Increment)
-            generator.emit<Bytecode::Op::Increment>();
-        else
-            generator.emit<Bytecode::Op::Decrement>();
+    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);
+    }
 
-        generator.emit<Bytecode::Op::SetVariable>(generator.intern_identifier(identifier.string()));
+    if (m_op == UpdateOp::Increment)
+        generator.emit<Bytecode::Op::Increment>();
+    else
+        generator.emit<Bytecode::Op::Decrement>();
 
-        if (!m_prefixed)
-            generator.emit<Bytecode::Op::Load>(*previous_value_for_postfix_reg);
-        return;
-    }
+    generator.emit_store_to_reference(*m_argument);
 
-    TODO();
+    if (!m_prefixed)
+        generator.emit<Bytecode::Op::Load>(*previous_value_for_postfix_reg);
 }
 
 void ThrowStatement::generate_bytecode(Bytecode::Generator& generator) const