/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include #include "cmMessageType.h" // IWYU pragma: keep namespace dap { class Session; struct CMakeInitializeResponse; } namespace cmDebugger { struct cmDebuggerException { std::string Id; std::string Description; }; struct cmDebuggerExceptionFilter { std::string Filter; std::string Label; }; /** The exception manager. */ class cmDebuggerExceptionManager { // Some older C++ standard libraries cannot hash an enum class by default. struct MessageTypeHash { std::size_t operator()(MessageType t) const { return std::hash{}(static_cast(t)); } }; dap::Session* DapSession; std::mutex Mutex; std::unordered_map RaiseExceptions; std::unordered_map ExceptionMap; cm::optional TheException; dap::SetExceptionBreakpointsResponse HandleSetExceptionBreakpointsRequest( dap::SetExceptionBreakpointsRequest const& request); dap::ExceptionInfoResponse HandleExceptionInfoRequest(); public: cmDebuggerExceptionManager(dap::Session* dapSession); void HandleInitializeRequest(dap::CMakeInitializeResponse& response); cm::optional RaiseExceptionIfAny(MessageType t, std::string const& text); void ClearAll(); }; } // namespace cmDebugger