blob: 2f312d461c4415b3aa6de00c5c59258e5630add5 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- Declaration.cpp -----------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Symbol/Declaration.h"
11#include "lldb/Core/Stream.h"
12
13using namespace lldb_private;
14
15Declaration::Declaration() :
16 m_file(),
17 m_line(0),
18 m_column(0)
19{
20}
21
22Declaration::Declaration(const FileSpec& f, uint32_t l, uint32_t c) :
23 m_file(f),
24 m_line(l),
25 m_column(c)
26{
27}
28
29Declaration::Declaration(const Declaration& rhs) :
30 m_file(rhs.m_file),
31 m_line(rhs.m_line),
32 m_column(rhs.m_column)
33{
34}
35
36Declaration::Declaration(const Declaration* decl_ptr) :
37 m_file(),
38 m_line(0),
39 m_column(0)
40{
41 if (decl_ptr != NULL)
42 *this = *decl_ptr;
43}
44
45bool
46Declaration::IsValid() const
47{
48 return m_file && m_line != 0;
49}
50
51void
52Declaration::Clear()
53{
54 m_file.Clear();
55 m_line= 0;
56 m_column = 0;
57}
58
59void
60Declaration::Dump(Stream *s) const
61{
62 if (m_file)
63 {
Greg Clayton12bec712010-06-28 21:30:43 +000064 *s << ", decl = " << m_file;
Chris Lattner24943d22010-06-08 16:52:24 +000065 if (m_line > 0)
66 s->Printf(":%u", m_line);
67 if (m_column > 0)
68 s->Printf(":%u", m_column);
Chris Lattner24943d22010-06-08 16:52:24 +000069 }
70 else
71 {
72 if (m_line > 0)
73 {
74 s->Printf(", line = %u", m_line);
75 if (m_column > 0)
76 s->Printf(":%u", m_column);
77 }
78 else if (m_column > 0)
79 s->Printf(", column = %u", m_column);
80 }
81}
82
83void
Greg Clayton72b71582010-09-02 21:44:10 +000084Declaration::DumpStopContext (Stream *s, bool show_fullpaths) const
Chris Lattner24943d22010-06-08 16:52:24 +000085{
86 if (m_file)
87 {
Greg Clayton72b71582010-09-02 21:44:10 +000088 if (show_fullpaths || s->GetVerbose())
Chris Lattner24943d22010-06-08 16:52:24 +000089 *s << m_file;
90 else
91 m_file.GetFilename().Dump(s);
92
93 if (m_line > 0)
94 s->Printf(":%u", m_line);
95 if (m_column > 0)
96 s->Printf(":%u", m_column);
97 }
98 else
99 {
100 s->Printf(" line %u", m_line);
101 if (m_column > 0)
102 s->Printf(":%u", m_column);
103 }
104}
105
106uint32_t
107Declaration::GetColumn() const
108{
109 return m_column;
110}
111
112FileSpec&
113Declaration::GetFile()
114{
115 return m_file;
116}
117
118const FileSpec&
119Declaration::GetFile() const
120{
121 return m_file;
122}
123
124uint32_t
125Declaration::GetLine() const
126{
127 return m_line;
128}
129
130size_t
131Declaration::MemorySize() const
132{
133 return sizeof(Declaration);
134}
135
136void
137Declaration::SetColumn(uint32_t col)
138{
139 m_column = col;
140}
141
142void
143Declaration::SetFile(const FileSpec& file)
144{
145 m_file = file;
146}
147
148void
149Declaration::SetLine(uint32_t line)
150{
151 m_line = line;
152}
153
154
155
156int
157Declaration::Compare(const Declaration& a, const Declaration& b)
158{
159 int result = FileSpec::Compare(a.m_file, b.m_file, true);
160 if (result)
161 return result;
162 if (a.m_line < b.m_line)
163 return -1;
164 else if (a.m_line > b.m_line)
165 return 1;
166 if (a.m_column < b.m_column)
167 return -1;
168 else if (a.m_column > b.m_column)
169 return 1;
170 return 0;
171}