From 6431dd7904da9559aebae8b71f0958b0928cb68c Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sun, 11 Dec 2022 18:24:33 +0000 Subject: [PATCH] LibJS: Make it possible to visit the edges of an ExecutionContext --- .../LibJS/Runtime/ExecutionContext.cpp | 17 +++++++++++++++++ .../Libraries/LibJS/Runtime/ExecutionContext.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp b/Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp index 51a3ff21df7..5ff2b39fdcd 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 3ac2f885219..4397604b0bc 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);