1 //===-- Declaration.cpp ---------------------------------------------------===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "lldb/Symbol/Declaration.h"
10 #include "lldb/Utility/Stream.h"
11
12 using namespace lldb_private;
13
Dump(Stream * s,bool show_fullpaths) const14 void Declaration::Dump(Stream *s, bool show_fullpaths) const {
15 if (m_file) {
16 *s << ", decl = ";
17 if (show_fullpaths)
18 *s << m_file;
19 else
20 *s << m_file.GetFilename();
21 if (m_line > 0)
22 s->Printf(":%u", m_line);
23 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
24 if (m_column > 0)
25 s->Printf(":%u", m_column);
26 #endif
27 } else {
28 if (m_line > 0) {
29 s->Printf(", line = %u", m_line);
30 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
31 if (m_column > 0)
32 s->Printf(":%u", m_column);
33 #endif
34 }
35 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
36 else if (m_column > 0)
37 s->Printf(", column = %u", m_column);
38 #endif
39 }
40 }
41
DumpStopContext(Stream * s,bool show_fullpaths) const42 bool Declaration::DumpStopContext(Stream *s, bool show_fullpaths) const {
43 if (m_file) {
44 if (show_fullpaths)
45 *s << m_file;
46 else
47 m_file.GetFilename().Dump(s);
48
49 if (m_line > 0)
50 s->Printf(":%u", m_line);
51 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
52 if (m_column > 0)
53 s->Printf(":%u", m_column);
54 #endif
55 return true;
56 } else if (m_line > 0) {
57 s->Printf(" line %u", m_line);
58 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
59 if (m_column > 0)
60 s->Printf(":%u", m_column);
61 #endif
62 return true;
63 }
64 return false;
65 }
66
MemorySize() const67 size_t Declaration::MemorySize() const { return sizeof(Declaration); }
68
Compare(const Declaration & a,const Declaration & b)69 int Declaration::Compare(const Declaration &a, const Declaration &b) {
70 int result = FileSpec::Compare(a.m_file, b.m_file, true);
71 if (result)
72 return result;
73 if (a.m_line < b.m_line)
74 return -1;
75 else if (a.m_line > b.m_line)
76 return 1;
77 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
78 if (a.m_column < b.m_column)
79 return -1;
80 else if (a.m_column > b.m_column)
81 return 1;
82 #endif
83 return 0;
84 }
85
FileAndLineEqual(const Declaration & declaration) const86 bool Declaration::FileAndLineEqual(const Declaration &declaration) const {
87 int file_compare = FileSpec::Compare(this->m_file, declaration.m_file, true);
88 return file_compare == 0 && this->m_line == declaration.m_line;
89 }
90
operator ==(const Declaration & lhs,const Declaration & rhs)91 bool lldb_private::operator==(const Declaration &lhs, const Declaration &rhs) {
92 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
93 if (lhs.GetColumn() != rhs.GetColumn())
94 return false;
95 #else
96 return lhs.GetLine() == rhs.GetLine() && lhs.GetFile() == rhs.GetFile();
97 #endif
98 }
99