================ @@ -1620,6 +1620,88 @@ void DAP::EventThread() { } } +std::vector<protocol::Breakpoint> DAP::SetSourceBreakpoints( + const protocol::Source &source, + const std::optional<std::vector<protocol::SourceBreakpoint>> &breakpoints) { + std::vector<protocol::Breakpoint> response_breakpoints; + if (source.sourceReference) { + // breakpoint set by assembly source. + auto &existing_breakpoints = + m_source_assembly_breakpoints[*source.sourceReference]; + response_breakpoints = + SetSourceBreakpoints(source, breakpoints, existing_breakpoints); + } else { + // breakpoint set by a regular source file. + const auto path = source.path.value_or(""); + auto &existing_breakpoints = m_source_breakpoints[path]; + response_breakpoints = + SetSourceBreakpoints(source, breakpoints, existing_breakpoints); + } + + return response_breakpoints; +} + +std::vector<protocol::Breakpoint> DAP::SetSourceBreakpoints( + const protocol::Source &source, + const std::optional<std::vector<protocol::SourceBreakpoint>> &breakpoints, + SourceBreakpointMap &existing_breakpoints) { + std::vector<protocol::Breakpoint> response_breakpoints; + + SourceBreakpointMap request_breakpoints; + if (breakpoints) { + for (const auto &bp : *breakpoints) { + SourceBreakpoint src_bp(*this, bp); + std::pair<uint32_t, uint32_t> bp_pos(src_bp.GetLine(), + src_bp.GetColumn()); + request_breakpoints.try_emplace(bp_pos, src_bp); + + const auto [iv, inserted] = + existing_breakpoints.try_emplace(bp_pos, src_bp); + // We check if this breakpoint already exists to update it. + if (inserted) { + if (auto error = iv->second.SetBreakpoint(source)) { ---------------- JDevlieghere wrote:
Don't use `auto`: the type isn't obvious from the RHS. ```suggestion if (llvm::Error error = iv->second.SetBreakpoint(source)) { ``` https://github.com/llvm/llvm-project/pull/139969 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits