Przeglądaj źródła

LibJS: Add ScopeNode::for_each_var_declared_identifier()

The same as for_each_var_declared_name but for identifiers.
Aliaksandr Kalenik 2 lat temu
rodzic
commit
401d97c45c
2 zmienionych plików z 11 dodań i 0 usunięć
  1. 10 0
      Userland/Libraries/LibJS/AST.cpp
  2. 1 0
      Userland/Libraries/LibJS/AST.h

+ 10 - 0
Userland/Libraries/LibJS/AST.cpp

@@ -4488,6 +4488,16 @@ ThrowCompletionOr<void> ScopeNode::for_each_var_declared_name(ThrowCompletionOrV
     return {};
 }
 
+ThrowCompletionOr<void> ScopeNode::for_each_var_declared_identifier(ThrowCompletionOrVoidCallback<Identifier const&>&& callback) const
+{
+    for (auto& declaration : m_var_declarations) {
+        TRY(declaration->for_each_bound_identifier([&](auto const& id) {
+            return callback(id);
+        }));
+    }
+    return {};
+}
+
 ThrowCompletionOr<void> ScopeNode::for_each_var_function_declaration_in_reverse_order(ThrowCompletionOrVoidCallback<FunctionDeclaration const&>&& callback) const
 {
     for (ssize_t i = m_var_declarations.size() - 1; i >= 0; i--) {

+ 1 - 0
Userland/Libraries/LibJS/AST.h

@@ -310,6 +310,7 @@ public:
     ThrowCompletionOr<void> for_each_lexically_declared_name(ThrowCompletionOrVoidCallback<DeprecatedFlyString const&>&& callback) const;
 
     ThrowCompletionOr<void> for_each_var_declared_name(ThrowCompletionOrVoidCallback<DeprecatedFlyString const&>&& callback) const;
+    ThrowCompletionOr<void> for_each_var_declared_identifier(ThrowCompletionOrVoidCallback<Identifier const&>&& callback) const;
 
     ThrowCompletionOr<void> for_each_var_function_declaration_in_reverse_order(ThrowCompletionOrVoidCallback<FunctionDeclaration const&>&& callback) const;
     ThrowCompletionOr<void> for_each_lexical_function_declaration_in_reverse_order(ThrowCompletionOrVoidCallback<FunctionDeclaration const&>&& callback) const;