From 4561469d52277f417cb0e23263c904bc7283f975 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Wed, 20 Sep 2023 01:19:09 +0200 Subject: [PATCH] LibJS: Fix BindingPattern::contains_expression() is name is expression If any of binding pattern entry's name is expession `contains_expression()` should return true. For example: ```js function evalInComputedPropertyKey( {[eval("var x = 'inner'")]: ignored} ) {} ``` `contains_expression()` should return true for the binding param in this function. --- Userland/Libraries/LibJS/AST.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index 0de00f1a92..9410e87a41 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -792,6 +792,8 @@ void NullLiteral::dump(int indent) const bool BindingPattern::contains_expression() const { for (auto& entry : entries) { + if (entry.name.has>()) + return true; if (entry.initializer) return true; if (auto binding_ptr = entry.alias.get_pointer>(); binding_ptr && (*binding_ptr)->contains_expression())