diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp index 165b47792e..47acfa5f56 100644 --- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp +++ b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp @@ -15,6 +15,12 @@ EnvironmentRecord::EnvironmentRecord(EnvironmentRecord* outer_environment) { } +void EnvironmentRecord::initialize(GlobalObject& global_object) +{ + m_global_object = &global_object; + Base::initialize(global_object); +} + void EnvironmentRecord::visit_edges(Visitor& visitor) { Base::visit_edges(visitor); diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h index 72bab5bfab..a8341dbe7a 100644 --- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h +++ b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h @@ -19,6 +19,11 @@ class EnvironmentRecord : public Object { JS_OBJECT(EnvironmentRecord, Object); public: + GlobalObject& global_object() { return *m_global_object; } + GlobalObject const& global_object() const { return *m_global_object; } + + virtual void initialize(GlobalObject&) override; + virtual Optional get_from_environment_record(FlyString const&) const = 0; virtual void put_into_environment_record(FlyString const&, Variable) = 0; virtual bool delete_from_environment_record(FlyString const&) = 0; @@ -44,6 +49,9 @@ protected: virtual void visit_edges(Visitor&) override; private: + virtual bool is_environment_record() const final { return true; } + + GlobalObject* m_global_object { nullptr }; EnvironmentRecord* m_outer_environment { nullptr }; }; diff --git a/Userland/Libraries/LibJS/Runtime/Object.h b/Userland/Libraries/LibJS/Runtime/Object.h index fdbeda0992..fdd43bf3b3 100644 --- a/Userland/Libraries/LibJS/Runtime/Object.h +++ b/Userland/Libraries/LibJS/Runtime/Object.h @@ -108,6 +108,7 @@ public: virtual bool is_global_object() const { return false; } virtual bool is_proxy_object() const { return false; } virtual bool is_native_function() const { return false; } + virtual bool is_environment_record() const { return false; } virtual bool is_global_environment_record() const { return false; } virtual bool is_declarative_environment_record() const { return false; } virtual bool is_function_environment_record() const { return false; }