From 332946ab4f77a16de6be7f9148817938c00e7ddd Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sat, 11 Sep 2021 20:55:11 +0100 Subject: [PATCH] LibJS: Prepare ExecutionContext to store the current Realm Record Also add VM::current_realm() to retrieve it, similar to all the other getters (running_execution_context() et al.). --- Userland/Libraries/LibJS/Runtime/VM.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h index 3134bc7d02..8d5708f3da 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.h +++ b/Userland/Libraries/LibJS/Runtime/VM.h @@ -42,6 +42,7 @@ struct ScopeFrame { bool pushed_environment { false }; }; +// 9.4 Execution Contexts, https://tc39.es/ecma262/#sec-execution-contexts struct ExecutionContext { explicit ExecutionContext(Heap& heap) : arguments(heap) @@ -56,6 +57,7 @@ struct ExecutionContext { Object* arguments_object { nullptr }; Environment* lexical_environment { nullptr }; Environment* variable_environment { nullptr }; + Realm* realm { nullptr }; bool is_strict_mode { false }; }; @@ -146,6 +148,11 @@ public: Environment const* variable_environment() const { return running_execution_context().variable_environment; } Environment* variable_environment() { return running_execution_context().variable_environment; } + // https://tc39.es/ecma262/#current-realm + // The value of the Realm component of the running execution context is also called the current Realm Record. + Realm const* current_realm() const { return running_execution_context().realm; } + Realm* current_realm() { return running_execution_context().realm; } + bool in_strict_mode() const; template