From 5b9469786e0eb6d5594af8ad0082981fe56aaeca Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 31 Oct 2025 21:26:12 +0100 Subject: [PATCH] LibJS: Move ExecutionContext::cached_source_range to rare data --- Libraries/LibJS/Runtime/ExecutionContext.cpp | 2 +- Libraries/LibJS/Runtime/ExecutionContext.h | 4 ++-- Libraries/LibJS/Runtime/VM.cpp | 11 ++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Libraries/LibJS/Runtime/ExecutionContext.cpp b/Libraries/LibJS/Runtime/ExecutionContext.cpp index 39bcd3b6a7..bceee6b598 100644 --- a/Libraries/LibJS/Runtime/ExecutionContext.cpp +++ b/Libraries/LibJS/Runtime/ExecutionContext.cpp @@ -144,7 +144,6 @@ void ExecutionContext::visit_edges(Cell::Visitor& visitor) visitor.visit(variable_environment); visitor.visit(lexical_environment); visitor.visit(private_environment); - visitor.visit(cached_source_range); visitor.visit(m_rare_data); if (this_value.has_value()) visitor.visit(*this_value); @@ -161,6 +160,7 @@ void ExecutionContextRareData::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(context_owner); + visitor.visit(cached_source_range); for (auto& context : unwind_contexts) { visitor.visit(context.lexical_environment); } diff --git a/Libraries/LibJS/Runtime/ExecutionContext.h b/Libraries/LibJS/Runtime/ExecutionContext.h index fec8d446b8..9abc4e0577 100644 --- a/Libraries/LibJS/Runtime/ExecutionContext.h +++ b/Libraries/LibJS/Runtime/ExecutionContext.h @@ -45,6 +45,8 @@ public: Vector> previously_scheduled_jumps; Vector> saved_lexical_environments; + mutable GC::Ptr cached_source_range; + // Non-standard: This points at something that owns this ExecutionContext, in case it needs to be protected from GC. GC::Ptr context_owner; @@ -90,8 +92,6 @@ public: // FIXME: Move this out of LibJS (e.g. by using the CustomData concept), as it's used exclusively by LibWeb. u32 skip_when_determining_incumbent_counter { 0 }; - mutable GC::Ptr cached_source_range; - Optional this_value; GC::Ptr executable; diff --git a/Libraries/LibJS/Runtime/VM.cpp b/Libraries/LibJS/Runtime/VM.cpp index 72de4fb281..81dd09e4d9 100644 --- a/Libraries/LibJS/Runtime/VM.cpp +++ b/Libraries/LibJS/Runtime/VM.cpp @@ -753,20 +753,21 @@ void VM::load_imported_module(ImportedModuleReferrer referrer, ModuleRequest con finish_loading_imported_module(referrer, module_request, payload, module); } -static GC::Ptr get_source_range(ExecutionContext const* context) +static GC::Ptr get_source_range(ExecutionContext* context) { // native function if (!context->executable) return {}; - if (!context->cached_source_range - || context->cached_source_range->program_counter != context->program_counter) { + if (!context->rare_data() + || !context->rare_data()->cached_source_range + || context->rare_data()->cached_source_range->program_counter != context->program_counter) { auto unrealized_source_range = context->executable->source_range_at(context->program_counter); - context->cached_source_range = context->executable->heap().allocate( + context->ensure_rare_data()->cached_source_range = context->executable->heap().allocate( context->program_counter, move(unrealized_source_range)); } - return context->cached_source_range; + return context->rare_data()->cached_source_range; } Vector VM::stack_trace() const