From f1e1d9dd74fabf7bce11749e442980e33a64be9d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 23 Jun 2021 12:29:12 +0200 Subject: [PATCH] LibJS: Add EnvironmentRecord::global_object() Our environment records are currently weird in that they inherit from Object, but don't have a connection to the global object. I'd like to remove this inheritance, and the first step is giving them their own pointer to the global object. --- Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp | 6 ++++++ Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h | 8 ++++++++ Userland/Libraries/LibJS/Runtime/Object.h | 1 + 3 files changed, 15 insertions(+) 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; }