1*1435f6b0SMed Ismail Bennani //===-- Declaration.cpp ---------------------------------------------------===//
2*1435f6b0SMed Ismail Bennani //
3*1435f6b0SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*1435f6b0SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
5*1435f6b0SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*1435f6b0SMed Ismail Bennani //
7*1435f6b0SMed Ismail Bennani //===----------------------------------------------------------------------===//
8*1435f6b0SMed Ismail Bennani
9*1435f6b0SMed Ismail Bennani #include "lldb/Core/Declaration.h"
10*1435f6b0SMed Ismail Bennani #include "lldb/Utility/Stream.h"
11*1435f6b0SMed Ismail Bennani
12*1435f6b0SMed Ismail Bennani using namespace lldb_private;
13*1435f6b0SMed Ismail Bennani
Dump(Stream * s,bool show_fullpaths) const14*1435f6b0SMed Ismail Bennani void Declaration::Dump(Stream *s, bool show_fullpaths) const {
15*1435f6b0SMed Ismail Bennani if (m_file) {
16*1435f6b0SMed Ismail Bennani *s << ", decl = ";
17*1435f6b0SMed Ismail Bennani if (show_fullpaths)
18*1435f6b0SMed Ismail Bennani *s << m_file;
19*1435f6b0SMed Ismail Bennani else
20*1435f6b0SMed Ismail Bennani *s << m_file.GetFilename();
21*1435f6b0SMed Ismail Bennani if (m_line > 0)
22*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_line);
23*1435f6b0SMed Ismail Bennani if (m_column != LLDB_INVALID_COLUMN_NUMBER)
24*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_column);
25*1435f6b0SMed Ismail Bennani } else {
26*1435f6b0SMed Ismail Bennani if (m_line > 0) {
27*1435f6b0SMed Ismail Bennani s->Printf(", line = %u", m_line);
28*1435f6b0SMed Ismail Bennani if (m_column != LLDB_INVALID_COLUMN_NUMBER)
29*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_column);
30*1435f6b0SMed Ismail Bennani } else if (m_column != LLDB_INVALID_COLUMN_NUMBER)
31*1435f6b0SMed Ismail Bennani s->Printf(", column = %u", m_column);
32*1435f6b0SMed Ismail Bennani }
33*1435f6b0SMed Ismail Bennani }
34*1435f6b0SMed Ismail Bennani
DumpStopContext(Stream * s,bool show_fullpaths) const35*1435f6b0SMed Ismail Bennani bool Declaration::DumpStopContext(Stream *s, bool show_fullpaths) const {
36*1435f6b0SMed Ismail Bennani if (m_file) {
37*1435f6b0SMed Ismail Bennani if (show_fullpaths)
38*1435f6b0SMed Ismail Bennani *s << m_file;
39*1435f6b0SMed Ismail Bennani else
40*1435f6b0SMed Ismail Bennani m_file.GetFilename().Dump(s);
41*1435f6b0SMed Ismail Bennani
42*1435f6b0SMed Ismail Bennani if (m_line > 0)
43*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_line);
44*1435f6b0SMed Ismail Bennani if (m_column != LLDB_INVALID_COLUMN_NUMBER)
45*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_column);
46*1435f6b0SMed Ismail Bennani return true;
47*1435f6b0SMed Ismail Bennani } else if (m_line > 0) {
48*1435f6b0SMed Ismail Bennani s->Printf(" line %u", m_line);
49*1435f6b0SMed Ismail Bennani if (m_column != LLDB_INVALID_COLUMN_NUMBER)
50*1435f6b0SMed Ismail Bennani s->Printf(":%u", m_column);
51*1435f6b0SMed Ismail Bennani return true;
52*1435f6b0SMed Ismail Bennani }
53*1435f6b0SMed Ismail Bennani return false;
54*1435f6b0SMed Ismail Bennani }
55*1435f6b0SMed Ismail Bennani
MemorySize() const56*1435f6b0SMed Ismail Bennani size_t Declaration::MemorySize() const { return sizeof(Declaration); }
57*1435f6b0SMed Ismail Bennani
Compare(const Declaration & a,const Declaration & b)58*1435f6b0SMed Ismail Bennani int Declaration::Compare(const Declaration &a, const Declaration &b) {
59*1435f6b0SMed Ismail Bennani int result = FileSpec::Compare(a.m_file, b.m_file, true);
60*1435f6b0SMed Ismail Bennani if (result)
61*1435f6b0SMed Ismail Bennani return result;
62*1435f6b0SMed Ismail Bennani if (a.m_line < b.m_line)
63*1435f6b0SMed Ismail Bennani return -1;
64*1435f6b0SMed Ismail Bennani else if (a.m_line > b.m_line)
65*1435f6b0SMed Ismail Bennani return 1;
66*1435f6b0SMed Ismail Bennani if (a.m_column < b.m_column)
67*1435f6b0SMed Ismail Bennani return -1;
68*1435f6b0SMed Ismail Bennani else if (a.m_column > b.m_column)
69*1435f6b0SMed Ismail Bennani return 1;
70*1435f6b0SMed Ismail Bennani return 0;
71*1435f6b0SMed Ismail Bennani }
72*1435f6b0SMed Ismail Bennani
FileAndLineEqual(const Declaration & declaration) const73*1435f6b0SMed Ismail Bennani bool Declaration::FileAndLineEqual(const Declaration &declaration) const {
74*1435f6b0SMed Ismail Bennani int file_compare = FileSpec::Compare(this->m_file, declaration.m_file, true);
75*1435f6b0SMed Ismail Bennani return file_compare == 0 && this->m_line == declaration.m_line;
76*1435f6b0SMed Ismail Bennani }
77*1435f6b0SMed Ismail Bennani
operator ==(const Declaration & lhs,const Declaration & rhs)78*1435f6b0SMed Ismail Bennani bool lldb_private::operator==(const Declaration &lhs, const Declaration &rhs) {
79*1435f6b0SMed Ismail Bennani if (lhs.GetColumn() != rhs.GetColumn())
80*1435f6b0SMed Ismail Bennani return false;
81*1435f6b0SMed Ismail Bennani
82*1435f6b0SMed Ismail Bennani return lhs.GetLine() == rhs.GetLine() && lhs.GetFile() == rhs.GetFile();
83*1435f6b0SMed Ismail Bennani }
84