From 778265ae9d58818f4b404249ea3722a9fc9a32b9 Mon Sep 17 00:00:00 2001 From: MacDue Date: Sun, 28 May 2023 13:14:14 +0100 Subject: [PATCH] LibJS: Fix reading cached source ranges Made a slight logic error in 95d69fc which meant the dummy range would be returned even if the source_range_storage contained an actual source range. This corrects that by resolving the null unrealized range to a dummy range, and storing that. It then can be treated as a normal source range. --- Userland/Libraries/LibJS/Runtime/Error.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Error.cpp b/Userland/Libraries/LibJS/Runtime/Error.cpp index 7ce2823f7e8..2e9f907bb33 100644 --- a/Userland/Libraries/LibJS/Runtime/Error.cpp +++ b/Userland/Libraries/LibJS/Runtime/Error.cpp @@ -17,12 +17,15 @@ namespace JS { SourceRange const& TracebackFrame::source_range() const { - if (auto* unrealized = source_range_storage.get_pointer(); unrealized && unrealized->source_code) { - auto source_range = unrealized->source_code->range_from_offsets(unrealized->start_offset, unrealized->end_offset); + if (auto* unrealized = source_range_storage.get_pointer()) { + auto source_range = [&] { + if (!unrealized->source_code) { + static auto dummy_source_code = SourceCode::create(String {}, String {}); + return SourceRange { dummy_source_code, {}, {} }; + } + return unrealized->source_code->range_from_offsets(unrealized->start_offset, unrealized->end_offset); + }(); source_range_storage = move(source_range); - } else { - static auto dummy_source_range = SourceRange { .code = SourceCode::create(String {}, String {}), .start = {}, .end = {} }; - return dummy_source_range; } return source_range_storage.get(); }