From ddea710933337f1a9801b98599580e72c6b5c8ad Mon Sep 17 00:00:00 2001 From: iliadsh Date: Mon, 13 Nov 2023 01:44:39 +0000 Subject: [PATCH] LibJS: Expose various offsets for GetGlobal JIT fast path --- Userland/Libraries/LibJS/Bytecode/Executable.h | 2 ++ Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h | 1 + Userland/Libraries/LibJS/Runtime/ExecutionContext.h | 1 + Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h | 3 +++ Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h | 2 ++ Userland/Libraries/LibJS/Runtime/Realm.h | 2 ++ 6 files changed, 11 insertions(+) diff --git a/Userland/Libraries/LibJS/Bytecode/Executable.h b/Userland/Libraries/LibJS/Bytecode/Executable.h index d2fad82858..e201dd3bef 100644 --- a/Userland/Libraries/LibJS/Bytecode/Executable.h +++ b/Userland/Libraries/LibJS/Bytecode/Executable.h @@ -34,6 +34,8 @@ struct PropertyLookupCache { }; struct GlobalVariableCache : public PropertyLookupCache { + static FlatPtr environment_serial_number_offset() { return OFFSET_OF(GlobalVariableCache, environment_serial_number); } + u64 environment_serial_number { 0 }; }; diff --git a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h index 197ef334b2..a378371ea8 100644 --- a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h +++ b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h @@ -71,6 +71,7 @@ public: [[nodiscard]] u64 environment_serial_number() const { return m_environment_serial_number; } static FlatPtr bindings_offset() { return OFFSET_OF(DeclarativeEnvironment, m_bindings); } + static FlatPtr environment_serial_number_offset() { return OFFSET_OF(DeclarativeEnvironment, m_environment_serial_number); } private: ThrowCompletionOr get_binding_value_direct(VM&, Binding&, bool strict); diff --git a/Userland/Libraries/LibJS/Runtime/ExecutionContext.h b/Userland/Libraries/LibJS/Runtime/ExecutionContext.h index f53f9aa076..858e2508b1 100644 --- a/Userland/Libraries/LibJS/Runtime/ExecutionContext.h +++ b/Userland/Libraries/LibJS/Runtime/ExecutionContext.h @@ -30,6 +30,7 @@ struct ExecutionContext { void visit_edges(Cell::Visitor&); + static FlatPtr realm_offset() { return OFFSET_OF(ExecutionContext, realm); } static FlatPtr lexical_environment_offset() { return OFFSET_OF(ExecutionContext, lexical_environment); } private: diff --git a/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h index 39d5cef37c..ea0b770702 100644 --- a/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h +++ b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h @@ -37,6 +37,9 @@ public: ThrowCompletionOr create_global_var_binding(DeprecatedFlyString const& name, bool can_be_deleted); ThrowCompletionOr create_global_function_binding(DeprecatedFlyString const& name, Value, bool can_be_deleted); + static FlatPtr object_record_offset() { return OFFSET_OF(GlobalEnvironment, m_object_record); } + static FlatPtr declarative_record_offset() { return OFFSET_OF(GlobalEnvironment, m_declarative_record); } + private: GlobalEnvironment(Object&, Object& this_value); diff --git a/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h index f38fdd75d6..64f552df7e 100644 --- a/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h +++ b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h @@ -41,6 +41,8 @@ public: // [[IsWithEnvironment]], Indicates whether this Environment Record is created for a with statement. bool is_with_environment() const { return m_with_environment; } + static FlatPtr binding_object_offset() { return OFFSET_OF(ObjectEnvironment, m_binding_object); } + private: ObjectEnvironment(Object& binding_object, IsWithEnvironment, Environment* outer_environment); diff --git a/Userland/Libraries/LibJS/Runtime/Realm.h b/Userland/Libraries/LibJS/Runtime/Realm.h index c30046f5f3..bd204ea133 100644 --- a/Userland/Libraries/LibJS/Runtime/Realm.h +++ b/Userland/Libraries/LibJS/Runtime/Realm.h @@ -48,6 +48,8 @@ public: HostDefined* host_defined() { return m_host_defined; } void set_host_defined(OwnPtr host_defined) { m_host_defined = move(host_defined); } + static FlatPtr global_environment_offset() { return OFFSET_OF(Realm, m_global_environment); } + private: Realm() = default;