Ver código fonte

LibJS: Reorganize ExecutionContext a little bit

- Move it to a separate header file
- Annotate the members that represent spec slots
- Reorganize the members (by spec vs non-spec)
Andreas Kling 3 anos atrás
pai
commit
df5414f47f

+ 37 - 0
Userland/Libraries/LibJS/Runtime/ExecutionContext.h

@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2020-2021, Linus Groh <linusg@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/FlyString.h>
+#include <LibJS/Forward.h>
+#include <LibJS/Runtime/MarkedValueList.h>
+#include <LibJS/Runtime/Value.h>
+
+namespace JS {
+
+// 9.4 Execution Contexts, https://tc39.es/ecma262/#sec-execution-contexts
+struct ExecutionContext {
+    explicit ExecutionContext(Heap& heap)
+        : arguments(heap)
+    {
+    }
+
+    FunctionObject* function { nullptr };          // [[Function]]
+    Realm* realm { nullptr };                      // [[Realm]]
+    Environment* lexical_environment { nullptr };  // [[LexicalEnvironment]]
+    Environment* variable_environment { nullptr }; // [[VariableEnvironment]]
+
+    ASTNode const* current_node { nullptr };
+    FlyString function_name;
+    Value this_value;
+    MarkedValueList arguments;
+    Object* arguments_object { nullptr };
+    bool is_strict_mode { false };
+};
+
+}

+ 1 - 19
Userland/Libraries/LibJS/Runtime/VM.h

@@ -18,6 +18,7 @@
 #include <LibJS/Runtime/Error.h>
 #include <LibJS/Runtime/ErrorTypes.h>
 #include <LibJS/Runtime/Exception.h>
+#include <LibJS/Runtime/ExecutionContext.h>
 #include <LibJS/Runtime/MarkedValueList.h>
 #include <LibJS/Runtime/Promise.h>
 #include <LibJS/Runtime/Value.h>
@@ -42,25 +43,6 @@ 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)
-    {
-    }
-
-    const ASTNode* current_node { nullptr };
-    FlyString function_name;
-    FunctionObject* function { nullptr };
-    Value this_value;
-    MarkedValueList arguments;
-    Object* arguments_object { nullptr };
-    Environment* lexical_environment { nullptr };
-    Environment* variable_environment { nullptr };
-    Realm* realm { nullptr };
-    bool is_strict_mode { false };
-};
-
 class VM : public RefCounted<VM> {
 public:
     struct CustomData {