mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:38:11 +00:00
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.
This commit is contained in:
parent
0fa47405df
commit
fb94415f03
5 changed files with 13 additions and 22 deletions
|
@ -4377,16 +4377,6 @@ ThrowCompletionOr<void> ScopeNode::for_each_lexically_declared_identifier(ThrowC
|
||||||
return {};
|
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
|
ThrowCompletionOr<void> ScopeNode::for_each_var_declared_identifier(ThrowCompletionOrVoidCallback<Identifier const&>&& callback) const
|
||||||
{
|
{
|
||||||
for (auto& declaration : m_var_declarations) {
|
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
|
// 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.
|
// a. If env.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
|
||||||
if (global_environment.has_lexical_declaration(name))
|
if (global_environment.has_lexical_declaration(identifier.string()))
|
||||||
return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, name);
|
return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, identifier.string());
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -309,7 +309,6 @@ public:
|
||||||
ThrowCompletionOr<void> for_each_lexically_scoped_declaration(ThrowCompletionOrVoidCallback<Declaration const&>&& callback) const;
|
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_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_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_var_function_declaration_in_reverse_order(ThrowCompletionOrVoidCallback<FunctionDeclaration const&>&& callback) const;
|
||||||
|
|
|
@ -769,8 +769,8 @@ void Parser::parse_module(Program& program)
|
||||||
if (found)
|
if (found)
|
||||||
continue;
|
continue;
|
||||||
// NOTE: Nothing in the callback throws an exception.
|
// NOTE: Nothing in the callback throws an exception.
|
||||||
MUST(program.for_each_var_declared_name([&](auto const& name) {
|
MUST(program.for_each_var_declared_identifier([&](auto const& identifier) {
|
||||||
if (name == exported_name)
|
if (identifier.string() == exported_name)
|
||||||
found = true;
|
found = true;
|
||||||
}));
|
}));
|
||||||
for (auto& import : program.imports()) {
|
for (auto& import : program.imports()) {
|
||||||
|
|
|
@ -743,10 +743,10 @@ ThrowCompletionOr<void> eval_declaration_instantiation(VM& vm, Program const& pr
|
||||||
// a. If varEnv is a global Environment Record, then
|
// a. If varEnv is a global Environment Record, then
|
||||||
if (global_var_environment) {
|
if (global_var_environment) {
|
||||||
// i. For each element name of varNames, do
|
// 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.
|
// 1. If varEnv.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
|
||||||
if (global_var_environment->has_lexical_declaration(name))
|
if (global_var_environment->has_lexical_declaration(identifier.string()))
|
||||||
return vm.throw_completion<SyntaxError>(ErrorType::TopLevelVariableAlreadyDeclared, name);
|
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.
|
// 2. NOTE: eval will not create a global var declaration that would be shadowed by a global lexical declaration.
|
||||||
return {};
|
return {};
|
||||||
|
@ -763,7 +763,8 @@ ThrowCompletionOr<void> eval_declaration_instantiation(VM& vm, Program const& pr
|
||||||
if (!is<ObjectEnvironment>(*this_environment)) {
|
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.
|
// 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
|
// 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
|
// a. If ! thisEnv.HasBinding(name) is true, then
|
||||||
if (MUST(this_environment->has_binding(name))) {
|
if (MUST(this_environment->has_binding(name))) {
|
||||||
// i. Throw a SyntaxError exception.
|
// i. Throw a SyntaxError exception.
|
||||||
|
|
|
@ -438,8 +438,9 @@ ThrowCompletionOr<void> SourceTextModule::initialize_environment(VM& vm)
|
||||||
// 21. For each element d of varDeclarations, do
|
// 21. For each element d of varDeclarations, do
|
||||||
// a. For each element dn of the BoundNames of d, 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,
|
// 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`.
|
// an exception should not result from `for_each_var_declared_identifier`.
|
||||||
MUST(m_ecmascript_code->for_each_var_declared_name([&](auto const& name) {
|
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
|
// i. If dn is not an element of declaredVarNames, then
|
||||||
if (!declared_var_names.contains_slow(name)) {
|
if (!declared_var_names.contains_slow(name)) {
|
||||||
// 1. Perform ! env.CreateMutableBinding(dn, false).
|
// 1. Perform ! env.CreateMutableBinding(dn, false).
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue