Explorar o código

LibJS: Delete Declaration::for_each_var_declared_name

1. Replaces for_each_var_declared_name usage with more generic
for_each_var_declared_identifier.
2. Deletes for_each_var_declared_name.
Aliaksandr Kalenik %!s(int64=2) %!d(string=hai) anos
pai
achega
fb94415f03

+ 3 - 13
Userland/Libraries/LibJS/AST.cpp

@@ -4377,16 +4377,6 @@ ThrowCompletionOr<void> ScopeNode::for_each_lexically_declared_identifier(ThrowC
     return {};
 }
 
-ThrowCompletionOr<void> ScopeNode::for_each_var_declared_name(ThrowCompletionOrVoidCallback<DeprecatedFlyString const&>&& callback) const
-{
-    for (auto& declaration : m_var_declarations) {
-        TRY(declaration->for_each_bound_identifier([&](auto const& identifier) {
-            return callback(identifier.string());
-        }));
-    }
-    return {};
-}
-
 ThrowCompletionOr<void> ScopeNode::for_each_var_declared_identifier(ThrowCompletionOrVoidCallback<Identifier const&>&& callback) const
 {
     for (auto& declaration : m_var_declarations) {
@@ -4690,10 +4680,10 @@ ThrowCompletionOr<void> Program::global_declaration_instantiation(VM& vm, Global
     }));
 
     // 4. For each element name of varNames, do
-    TRY(for_each_var_declared_name([&](auto const& name) -> ThrowCompletionOr<void> {
+    TRY(for_each_var_declared_identifier([&](auto const& identifier) -> ThrowCompletionOr<void> {
         // a. If env.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
-        if (global_environment.has_lexical_declaration(name))
-            return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, name);
+        if (global_environment.has_lexical_declaration(identifier.string()))
+            return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, identifier.string());
 
         return {};
     }));

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

@@ -309,7 +309,6 @@ public:
     ThrowCompletionOr<void> for_each_lexically_scoped_declaration(ThrowCompletionOrVoidCallback<Declaration const&>&& callback) const;
     ThrowCompletionOr<void> for_each_lexically_declared_identifier(ThrowCompletionOrVoidCallback<Identifier 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;

+ 2 - 2
Userland/Libraries/LibJS/Parser.cpp

@@ -769,8 +769,8 @@ void Parser::parse_module(Program& program)
             if (found)
                 continue;
             // NOTE: Nothing in the callback throws an exception.
-            MUST(program.for_each_var_declared_name([&](auto const& name) {
-                if (name == exported_name)
+            MUST(program.for_each_var_declared_identifier([&](auto const& identifier) {
+                if (identifier.string() == exported_name)
                     found = true;
             }));
             for (auto& import : program.imports()) {

+ 5 - 4
Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp

@@ -743,10 +743,10 @@ ThrowCompletionOr<void> eval_declaration_instantiation(VM& vm, Program const& pr
         // a. If varEnv is a global Environment Record, then
         if (global_var_environment) {
             // i. For each element name of varNames, do
-            TRY(program.for_each_var_declared_name([&](auto const& name) -> ThrowCompletionOr<void> {
+            TRY(program.for_each_var_declared_identifier([&](auto const& identifier) -> ThrowCompletionOr<void> {
                 // 1. If varEnv.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
-                if (global_var_environment->has_lexical_declaration(name))
-                    return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, name);
+                if (global_var_environment->has_lexical_declaration(identifier.string()))
+                    return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, identifier.string());
 
                 // 2. NOTE: eval will not create a global var declaration that would be shadowed by a global lexical declaration.
                 return {};
@@ -763,7 +763,8 @@ ThrowCompletionOr<void> eval_declaration_instantiation(VM& vm, Program const& pr
             if (!is<ObjectEnvironment>(*this_environment)) {
                 // 1. NOTE: The environment of with statements cannot contain any lexical declaration so it doesn't need to be checked for var/let hoisting conflicts.
                 // 2. For each element name of varNames, do
-                TRY(program.for_each_var_declared_name([&](auto const& name) -> ThrowCompletionOr<void> {
+                TRY(program.for_each_var_declared_identifier([&](auto const& identifier) -> ThrowCompletionOr<void> {
+                    auto const& name = identifier.string();
                     // a. If ! thisEnv.HasBinding(name) is true, then
                     if (MUST(this_environment->has_binding(name))) {
                         // i. Throw a SyntaxError exception.

+ 3 - 2
Userland/Libraries/LibJS/SourceTextModule.cpp

@@ -438,8 +438,9 @@ ThrowCompletionOr<void> SourceTextModule::initialize_environment(VM& vm)
     // 21. For each element d of varDeclarations, do
     // a. For each element dn of the BoundNames of d, do
     // NOTE: Due to the use of MUST with `create_mutable_binding` and `initialize_binding` below,
-    //       an exception should not result from `for_each_var_declared_name`.
-    MUST(m_ecmascript_code->for_each_var_declared_name([&](auto const& name) {
+    //       an exception should not result from `for_each_var_declared_identifier`.
+    MUST(m_ecmascript_code->for_each_var_declared_identifier([&](auto const& identifier) {
+        auto const& name = identifier.string();
         // i. If dn is not an element of declaredVarNames, then
         if (!declared_var_names.contains_slow(name)) {
             // 1. Perform ! env.CreateMutableBinding(dn, false).