From 55531e5cda9175c02dcc86cbaaef9cde856e82a3 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 26 Jun 2023 15:26:46 +0200 Subject: [PATCH] LibJS/Bytecode: Use LHS identifier as function name on logical assign This now creates a function named `x`: x ||= function() { } 9 new passes on test262. :^) --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index f1826fcf1c..be7df5b9a9 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -493,7 +493,11 @@ Bytecode::CodeGenerationErrorOr AssignmentExpression::generate_bytecode(By // if the logical assignment condition fails. auto lhs_reg = generator.allocate_register(); generator.emit(lhs_reg); - TRY(m_rhs->generate_bytecode(generator)); + + if (lhs->is_identifier()) + TRY(generator.emit_named_evaluation_if_anonymous_function(*m_rhs, static_cast(*lhs).string())); + else + TRY(m_rhs->generate_bytecode(generator)); switch (m_op) { case AssignmentOp::AdditionAssignment: