소스 검색

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.).
Linus Groh 3 년 전
부모
커밋
332946ab4f
1개의 변경된 파일7개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      Userland/Libraries/LibJS/Runtime/VM.h

+ 7 - 0
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<typename Callback>