瀏覽代碼

LibJS/Bytecode: Emit GetPrivateById for private member expressions

This makes it possible to call private member functions.

347 new passes on test262. :^)
Andreas Kling 2 年之前
父節點
當前提交
99b23fe2ad
共有 1 個文件被更改,包括 3 次插入7 次删除
  1. 3 7
      Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp

+ 3 - 7
Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp

@@ -1353,14 +1353,10 @@ static Bytecode::CodeGenerationErrorOr<void> get_base_and_value_from_member_expr
         if (member_expression.is_computed()) {
         if (member_expression.is_computed()) {
             TRY(member_expression.property().generate_bytecode(generator));
             TRY(member_expression.property().generate_bytecode(generator));
             generator.emit<Bytecode::Op::GetByValue>(this_reg);
             generator.emit<Bytecode::Op::GetByValue>(this_reg);
+        } else if (is<PrivateIdentifier>(member_expression.property())) {
+            generator.emit<Bytecode::Op::GetPrivateById>(generator.intern_identifier(verify_cast<PrivateIdentifier>(member_expression.property()).string()));
         } else {
         } else {
-            auto identifier_table_ref = [&] {
-                if (is<PrivateIdentifier>(member_expression.property()))
-                    return generator.intern_identifier(verify_cast<PrivateIdentifier>(member_expression.property()).string());
-                return generator.intern_identifier(verify_cast<Identifier>(member_expression.property()).string());
-            }();
-
-            generator.emit<Bytecode::Op::GetById>(identifier_table_ref);
+            generator.emit<Bytecode::Op::GetById>(generator.intern_identifier(verify_cast<Identifier>(member_expression.property()).string()));
         }
         }
     }
     }