1 //===-- SourceLocationSpec.cpp --------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Core/SourceLocationSpec.h"
10 #include "lldb/Utility/StreamString.h"
11 #include "llvm/ADT/StringExtras.h"
15 using namespace lldb_private
;
17 SourceLocationSpec::SourceLocationSpec(FileSpec file_spec
, uint32_t line
,
18 std::optional
<uint16_t> column
,
19 bool check_inlines
, bool exact_match
)
20 : m_declaration(file_spec
, line
,
21 column
.value_or(LLDB_INVALID_COLUMN_NUMBER
)),
22 m_check_inlines(check_inlines
), m_exact_match(exact_match
) {}
24 SourceLocationSpec::operator bool() const { return m_declaration
.IsValid(); }
26 bool SourceLocationSpec::operator!() const { return !operator bool(); }
28 bool SourceLocationSpec::operator==(const SourceLocationSpec
&rhs
) const {
29 return m_declaration
== rhs
.m_declaration
&&
30 m_check_inlines
== rhs
.GetCheckInlines() &&
31 m_exact_match
== rhs
.GetExactMatch();
34 bool SourceLocationSpec::operator!=(const SourceLocationSpec
&rhs
) const {
35 return !(*this == rhs
);
38 bool SourceLocationSpec::operator<(const SourceLocationSpec
&rhs
) const {
39 return SourceLocationSpec::Compare(*this, rhs
) < 0;
42 Stream
&lldb_private::operator<<(Stream
&s
, const SourceLocationSpec
&loc
) {
47 int SourceLocationSpec::Compare(const SourceLocationSpec
&lhs
,
48 const SourceLocationSpec
&rhs
) {
49 return Declaration::Compare(lhs
.m_declaration
, rhs
.m_declaration
);
52 bool SourceLocationSpec::Equal(const SourceLocationSpec
&lhs
,
53 const SourceLocationSpec
&rhs
, bool full
) {
54 return full
? lhs
== rhs
55 : (lhs
.GetFileSpec() == rhs
.GetFileSpec() &&
56 lhs
.GetLine() == rhs
.GetLine());
59 void SourceLocationSpec::Dump(Stream
&s
) const {
60 s
<< "check inlines = " << llvm::toStringRef(m_check_inlines
);
61 s
<< ", exact match = " << llvm::toStringRef(m_exact_match
);
62 m_declaration
.Dump(&s
, true);
65 std::string
SourceLocationSpec::GetString() const {
68 return ss
.GetString().str();
71 std::optional
<uint32_t> SourceLocationSpec::GetLine() const {
72 uint32_t line
= m_declaration
.GetLine();
73 if (line
== 0 || line
== LLDB_INVALID_LINE_NUMBER
)
78 std::optional
<uint16_t> SourceLocationSpec::GetColumn() const {
79 uint16_t column
= m_declaration
.GetColumn();
80 if (column
== LLDB_INVALID_COLUMN_NUMBER
)