mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:17:36 +00:00
LibJS: Make Environment::has_binding() optionally return binding index
If the caller wants to use the binding index for anything, if there is such a thing, it can now be obtained via an optional out-parameter.
This commit is contained in:
parent
6ef5464015
commit
cb696eff08
7 changed files with 13 additions and 8 deletions
|
@ -35,9 +35,14 @@ void DeclarativeEnvironment::visit_edges(Visitor& visitor)
|
|||
}
|
||||
|
||||
// 9.1.1.1.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-declarative-environment-records-hasbinding-n
|
||||
bool DeclarativeEnvironment::has_binding(FlyString const& name) const
|
||||
bool DeclarativeEnvironment::has_binding(FlyString const& name, Optional<size_t>* out_index) const
|
||||
{
|
||||
return m_names.contains(name);
|
||||
auto it = m_names.find(name);
|
||||
if (it == m_names.end())
|
||||
return false;
|
||||
if (out_index)
|
||||
*out_index = it->value;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 9.1.1.1.2 CreateMutableBinding ( N, D ), https://tc39.es/ecma262/#sec-declarative-environment-records-createmutablebinding-n-d
|
||||
|
|
|
@ -21,7 +21,7 @@ public:
|
|||
explicit DeclarativeEnvironment(Environment* parent_scope);
|
||||
virtual ~DeclarativeEnvironment() override;
|
||||
|
||||
virtual bool has_binding(FlyString const& name) const override;
|
||||
virtual bool has_binding(FlyString const& name, Optional<size_t>* = nullptr) const override;
|
||||
virtual void create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted) override;
|
||||
virtual void create_immutable_binding(GlobalObject&, FlyString const& name, bool strict) override;
|
||||
virtual void initialize_binding(GlobalObject&, FlyString const& name, Value) override;
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
|
||||
virtual Object* with_base_object() const { return nullptr; }
|
||||
|
||||
virtual bool has_binding([[maybe_unused]] FlyString const& name) const { return false; }
|
||||
virtual bool has_binding([[maybe_unused]] FlyString const& name, [[maybe_unused]] Optional<size_t>* out_index = nullptr) const { return false; }
|
||||
virtual void create_mutable_binding(GlobalObject&, [[maybe_unused]] FlyString const& name, [[maybe_unused]] bool can_be_deleted) { }
|
||||
virtual void create_immutable_binding(GlobalObject&, [[maybe_unused]] FlyString const& name, [[maybe_unused]] bool strict) { }
|
||||
virtual void initialize_binding(GlobalObject&, [[maybe_unused]] FlyString const& name, Value) { }
|
||||
|
|
|
@ -36,7 +36,7 @@ Value GlobalEnvironment::get_this_binding(GlobalObject&) const
|
|||
}
|
||||
|
||||
// 9.1.1.4.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-global-environment-records-hasbinding-n
|
||||
bool GlobalEnvironment::has_binding(FlyString const& name) const
|
||||
bool GlobalEnvironment::has_binding(FlyString const& name, Optional<size_t>*) const
|
||||
{
|
||||
if (m_declarative_record->has_binding(name))
|
||||
return true;
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
virtual bool has_this_binding() const final { return true; }
|
||||
virtual Value get_this_binding(GlobalObject&) const final;
|
||||
|
||||
virtual bool has_binding(FlyString const& name) const override;
|
||||
virtual bool has_binding(FlyString const& name, Optional<size_t>* = nullptr) const override;
|
||||
virtual void create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted) override;
|
||||
virtual void create_immutable_binding(GlobalObject&, FlyString const& name, bool strict) override;
|
||||
virtual void initialize_binding(GlobalObject&, FlyString const& name, Value) override;
|
||||
|
|
|
@ -25,7 +25,7 @@ void ObjectEnvironment::visit_edges(Cell::Visitor& visitor)
|
|||
}
|
||||
|
||||
// 9.1.1.2.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-object-environment-records-hasbinding-n
|
||||
bool ObjectEnvironment::has_binding(FlyString const& name) const
|
||||
bool ObjectEnvironment::has_binding(FlyString const& name, Optional<size_t>*) const
|
||||
{
|
||||
auto& vm = this->vm();
|
||||
bool found_binding = TRY_OR_DISCARD(m_binding_object.has_property(name));
|
||||
|
|
|
@ -20,7 +20,7 @@ public:
|
|||
};
|
||||
ObjectEnvironment(Object& binding_object, IsWithEnvironment, Environment* outer_environment);
|
||||
|
||||
virtual bool has_binding(FlyString const& name) const override;
|
||||
virtual bool has_binding(FlyString const& name, Optional<size_t>* = nullptr) const override;
|
||||
virtual void create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted) override;
|
||||
virtual void create_immutable_binding(GlobalObject&, FlyString const& name, bool strict) override;
|
||||
virtual void initialize_binding(GlobalObject&, FlyString const& name, Value) override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue