diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index 9cab06633a..a6a1e5c764 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -2461,8 +2461,12 @@ void BindingPattern::dump(int indent) const outln("(Identifier)"); if (entry.name.has>()) { entry.name.get>()->dump(indent + 3); - } else { + } else if (entry.name.has>()) { entry.name.get>()->dump(indent + 3); + } else { + VERIFY(entry.name.has()); + print_indent(indent + 3); + outln(""); } } else if (entry.is_elision()) { print_indent(indent + 2); diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 5e962af277..b9618372cc 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -1032,19 +1032,24 @@ static Bytecode::CodeGenerationErrorOr generate_object_binding_pattern_byt for (auto& [name, alias, initializer, is_rest] : pattern.entries) { if (is_rest) { - VERIFY(name.has>()); - VERIFY(alias.has()); VERIFY(!initializer); + if (name.has>()) { + auto identifier = name.get>()->string(); + auto interned_identifier = generator.intern_identifier(identifier); - auto identifier = name.get>()->string(); - auto interned_identifier = generator.intern_identifier(identifier); + generator.emit_with_extra_register_slots(excluded_property_names.size(), value_reg, excluded_property_names); + if (create_variables) + generator.emit(interned_identifier, Bytecode::Op::EnvironmentMode::Lexical, false); + generator.emit(interned_identifier, initialization_mode); - generator.emit_with_extra_register_slots(excluded_property_names.size(), value_reg, excluded_property_names); - if (create_variables) - generator.emit(interned_identifier, Bytecode::Op::EnvironmentMode::Lexical, false); - generator.emit(interned_identifier, initialization_mode); - - return {}; + return {}; + } + if (alias.has>()) { + generator.emit_with_extra_register_slots(excluded_property_names.size(), value_reg, excluded_property_names); + TRY(generator.emit_store_to_reference(alias.get>())); + return {}; + } + VERIFY_NOT_REACHED(); } Bytecode::StringTableIndex name_index;