diff --git a/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp b/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp index 51a3ff21df..5ff2b39fdc 100644 --- a/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp +++ b/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp @@ -7,6 +7,7 @@ */ #include +#include 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); + }); +} + } diff --git a/Userland/Libraries/LibJS/Runtime/ExecutionContext.h b/Userland/Libraries/LibJS/Runtime/ExecutionContext.h index 3ac2f88521..4397604b0b 100644 --- a/Userland/Libraries/LibJS/Runtime/ExecutionContext.h +++ b/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 existing_arguments);