/* * Copyright (c) 2020, Andreas Kling * Copyright (c) 2021-2022, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace JS { struct JS_API TracebackFrame { Utf16String function_name; [[nodiscard]] SourceRange const& source_range() const; Optional cached_source_range; }; enum CompactTraceback { No, Yes, }; class JS_API ErrorData { public: explicit ErrorData(VM&); [[nodiscard]] Utf16String stack_string(CompactTraceback compact = CompactTraceback::No) const; [[nodiscard]] Vector const& traceback() const { return m_traceback; } void set_cached_string(GC::Ref string) { m_cached_string = string; } [[nodiscard]] GC::Ptr cached_string() const { return m_cached_string; } protected: void visit_edges(Cell::Visitor&); private: void populate_stack(VM&); Vector m_traceback; GC::Ptr m_cached_string; }; }