1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:27:43 +00:00

LibJS: Allow direct index-based initialization of a declarative binding

Similar to the direct getter and setter in DeclarativeEnvironment, there
are cases where we already know the index of a binding and can avoid a
O(n) lookup to re-find that index.
This commit is contained in:
Timothy Flynn 2022-03-08 12:02:55 -05:00 committed by Linus Groh
parent 533170fbfa
commit 435f49d98e
2 changed files with 9 additions and 2 deletions

View file

@ -86,11 +86,17 @@ ThrowCompletionOr<void> DeclarativeEnvironment::create_immutable_binding(GlobalO
}
// 9.1.1.1.4 InitializeBinding ( N, V ), https://tc39.es/ecma262/#sec-declarative-environment-records-initializebinding-n-v
ThrowCompletionOr<void> DeclarativeEnvironment::initialize_binding(GlobalObject&, FlyString const& name, Value value)
ThrowCompletionOr<void> DeclarativeEnvironment::initialize_binding(GlobalObject& global_object, FlyString const& name, Value value)
{
auto index = find_binding_index(name);
VERIFY(index.has_value());
auto& binding = m_bindings[*index];
return initialize_binding_direct(global_object, *index, value);
}
ThrowCompletionOr<void> DeclarativeEnvironment::initialize_binding_direct(GlobalObject&, size_t index, Value value)
{
auto& binding = m_bindings[index];
// 1. Assert: envRec must have an uninitialized binding for N.
VERIFY(binding.initialized == false);