Quellcode durchsuchen

LibJS: Make it possible to visit the edges of an ExecutionContext

Luke Wilde vor 2 Jahren
Ursprung
Commit
6431dd7904

+ 17 - 0
Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp

@@ -7,6 +7,7 @@
  */
 
 #include <LibJS/Runtime/ExecutionContext.h>
+#include <LibJS/Runtime/FunctionObject.h>
 
 namespace JS {
 
@@ -38,4 +39,20 @@ ExecutionContext ExecutionContext::copy() const
     return copy;
 }
 
+void ExecutionContext::visit_edges(Cell::Visitor& visitor)
+{
+    visitor.visit(function);
+    visitor.visit(realm);
+    visitor.visit(variable_environment);
+    visitor.visit(lexical_environment);
+    visitor.visit(private_environment);
+    visitor.visit(context_owner);
+    visitor.visit(this_value);
+    script_or_module.visit(
+        [](Empty) {},
+        [&](auto& script_or_module) {
+            visitor.visit(script_or_module);
+        });
+}
+
 }

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

@@ -26,6 +26,8 @@ struct ExecutionContext {
 
     [[nodiscard]] ExecutionContext copy() const;
 
+    void visit_edges(Cell::Visitor&);
+
 private:
     explicit ExecutionContext(MarkedVector<Value> existing_arguments);